《Maven实战》笔记-8-构建部署Web项目

摘要:
1、 Web项目结构1。将Web项目打包方法明确指定为war:Maven项目结构在war包中没有lib目录。在战争模式下打包时,Maven将根据POM配置从本地仓库复制相应的Jar文件。3.War包名称——finalName元素配置超级POM中设置的值是${project.authenticationId}-${project.version}。战争要直接在命令行上运行mvnjetty,请执行以下操作:
 
一、Web项目结构
1、显式指定Web项目打包方式为war:
 
《Maven实战》笔记-8-构建部署Web项目第1张
2、默认目录
根据“约定大于配置”的规则,Web项目的类及资源文件默认位置为src/main/java和src/main/resources,测试类和测试资源文件默认位置src/test/java和src/test/resources,Web资源目录位于src/main/webapp。
Maven项目结构没有War包中的lib目录,因为依赖都配置在POM中,Maven在用War方式打包的时候会根据POM配置从本地仓库复制相应的Jar文件。
 
3、war包名称——finalName元素配置
超级POM中设定的值为${project.artifactId}-${project.version}.war。
部署测试环境或最终产品环境,需要简洁的war包,需要配置finalName元素。
 
二、使用jetty-maven-plugin进行测试
1、原理
传统的Web测试方法要求编译、测试、打包及部署,这往往消耗很多时间,jetty-maven-plugin能够帮助我们节省时间,它能够周期性地检查项目内容,发现变更后自动更新到内置的Jetty Web容器中。即,帮我们省去了打包和部署的步骤。
2、配置
《Maven实战》笔记-8-构建部署Web项目第2张
webappConfig元素下的contextPath表示项目部署后的上下文路径,上述配置/test表示用户可以通过http://hostname:port/test/访问该应用。
3、启动jetty-maven-plugin
默认情况下,只有org.apache.maven.plugins和org.codehaus.mojo两个gounpId下的插件才支持简化的命令行应用,即可运行mvn help:system。但mvn jetty:run就不行。
为了能够在命令行直接运行mvn jetty:run,用户需要配置settings.xml如下:
《Maven实战》笔记-8-构建部署Web项目第3张
然后可运行:
  1. mvn jetty:run
 
或者指定端口:
  1. mvn jetty:run -Djetty.port=9999
停止测试运行,可Ctrl+C即可。
 
三、使用Cargo实现自动化部署
 
cargo-maven2-plugin和jetty-maven-plugin的功能看起来相似,但是目的不同。jetty-maven-plugin主要用来帮助日常的快速开发和测试,而cargo-maven2-plugin主要服务于自动化部署。
使用cargo,只需要一条简单的maven命令,就可以构建项目并部署到Web容器中,进行功能测试。
1、部署至本地Web容器
Cargo支持两种本地部署的方式,分别为standalone模式和existing模式。在stsndalone模式中,Cargo会从web容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置被重新生成。
而在existing模式中,用户需要指定现有的web容器配置目录,然后Cargo会直接使用这些配置并将应用部署到其对应的位置。
如standalone模式的配置样例:
《Maven实战》笔记-8-构建部署Web项目第4张
《Maven实战》笔记-8-构建部署Web项目第5张
 
注意,与jetty一样,cargo-maven2-plugin的groupId是org.codehaus.cargo,不属于官方的两个Maven插件groupId,若使用简化的命令行则需要在settings.xml中pluginGroup元素中配置。
然后运行以下命令:
  1. mvn cargo:start
 
Cargo默认Web容器监听8080端口,也可以通过如下配置进行修改:
《Maven实战》笔记-8-构建部署Web项目第6张
 
existing模式:
需要将上述Configuration子元素type的值为existing,而对于的home子元素表示现有的Web容器目录。运行后,可在Tomcat的webapps子目录看到被部署的Maven项目。
 
2、部署至远程Web容器
除了让Cargo直接管理本地Web容器外,还可以让Cargo部署应用至远程的正在运行的Web容器,前提是拥有该容器的相应权限。
《Maven实战》笔记-8-构建部署Web项目第7张
《Maven实战》笔记-8-构建部署Web项目第8张
tomcat中的用户权限可参看如下配置: 
  1. <role rolename="tomcat"/>
  2.   <role rolename="role1"/>
  3.   <role rolename="admin"/> 
  4.   <role rolename="manager-gui"/>
  5.   <role rolename="manager-script"/>
  6.   <role rolename="manager"/>  
  7.   <user username="admin" password="admin123" roles="admin,manager,manager-script,manager-gui"/>
 
然后运行命令如下:
  1. mvn cargo:redeploy
若容器已经部署了当前应用,Cargo会先将其卸载,然后重新部署。
 
注意,若要部署在远程机器,则需要注意以下几点:
1、远程机器防火墙要关闭
如红帽Linus系列使用如下命令:
  1. systemctl stop firewalld
 
2、远程机器的Tomcat要配置manager用户,且要有manager-script角色
参考上述tomcat中的用户权限配置,否则可能会有如下错误:
  1. [ERROR]Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.6.1:redeploy (default-cli) on project manage-admin:Executiondefault-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.6.1:redeploy faile
  2. d:Failed to redeploy [H:workspaceQianduManagemanage-admin argetmanage-admin.war]:The username you provided is not allowed to use the text-based TomcatManager(error 403):Server returned HTTP response code
  3. :403for URL: http://localhost:8080/manager/text/list -> [Help 1]
  4. [ERROR]
  5. [ERROR]To see the full stack trace of the errors, re-run Maven with the -e switch.
  6. [ERROR]Re-run Mavenusing the -X switch to enable full debug logging.
  7. [ERROR]
  8. [ERROR]For more information about the errors and possible solutions, please read the following articles:
  9. [ERROR][Help1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
 
 
3、远程机器的Tomcat允许其他机器登录manager页面

需要在Tomcat目录的conf/Catalina/localhost/下新增文件:

manager.xml,内容如下:

 

  1. <Context privileged="true" antiResourceLocking="false"
    docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
    </Context>

 
4、plugin/configuration/configuration/properties需要配置cargo.hostname域名,否则默认localhost(无论cargo.tomcat.manager.url如何配置)
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.6.1</version>
<configuration>
<container>
<containerId>tomcat8x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.hostname>10.110.2.161</cargo.hostname>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password>admin123</cargo.remote.password>
<cargo.tomcat.manager.url>http://10.110.2.161:8080/manager</cargo.tomcat.manager.url>
</properties>
</configuration>
</configuration>
</plugin>
 
 
 
 
 
 
 



来自为知笔记(Wiz)



免责声明:文章转载自《《Maven实战》笔记-8-构建部署Web项目》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇从零开始Vue项目实战(二)-搭建环境Halcon斑点分析涉及算子及其高阶运用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何获取微信公众号的关注链接?

1.打开PC端微信,点击公众号 2.左键点击公众号图标,然后再带年纪中间的那个按钮。 3.点击“复制链接地址”,这串地址就是公众号关注链接。  4.<a href="http://t.zoukankan.com/你复制的链接"></a> <a href="https://mp.weixin.qq.com/mp/profi...

Android color颜色-色号总结

code时经常会用到颜色,然而对于像我这样的对于颜色不是很敏感的同学来说,就很痛苦了。 我想要某种颜色,但是又说不出来具体是哪种;这边总结了一下color种类以及色号。 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="white"...

docker运行爬虫代码

目录 docker 启动与停止 镜像制作 Dockerfile build 镜像 镜像操作 容器操作 docker运行爬虫代码 系统:Ubuntu 在项目根目录的同级目录下新建 Dockerfile 文件,这个Dockerfile就作为打包项目的配置文件 但是在这之前我还要做一件事情:就是将 python 依赖的一些基础环境打包成一个基础镜像,...

div块元素垂直水平居中方法总结

1、已知块级元素的宽和高,使用绝对定位+外边距设定水平垂直居中。 父元素position:relative,子元素position:absolute;top:50%;left:50%;margin-top:-height/2;margin-left:-width/2; 效果图如下 代码: <div class="box"> <d...

wpf简单进度条

UserControl x:Class="WpfApplication1.UserControl2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:...

CH5 ResourceManager重启

目录 概述 特性 非工作保留RM重启 工作保留RM重启 配置 Enable RM Restart 配置RM状态的保存 配置工作保留RM恢复 概述 ResourceManager是集群中绝对的资源管理工具,并且调度应用在YARN上运行。因此对于YARN来说是一个单点问题。这个文档介绍RM的重启。 有2种重启的方式: 1.非工作保留RM...