web应用的部署包结构与普通构件的jar包不同,其部署包为war类型,所以声明maven项目的时候就要特殊处理,其声明和目录结构如下:
<modelVersion>4.0.0</modelVersion>
<artifactId>account-web</artifactId>
<packaging>war</packaging>主要的不同是packaging的配置。
目录结构:
-war/
+META-INF/
+WEB-INF/
+classes/
+abc.class
+lib/
+abc.jar
+web.xml
+img
+css
+js
+abc.html
+abcd.jsp
工程目录结构如下:
正常情况下,我们做测试的时候,是将工程打war包,然后手工发布到web服务器并启动,然后进行测试。
这种方式依赖大量的人工,所以我们可以使用插件简化这一过程,jetty-maven-plugin插件,可以自动化帮我们完成手工部署的动作,并且无需反复重新部署,只要部署一次,插件可以自动按照我们配置的时间做周期性检查,如果编译文件有更新的话,插件会自动加载更新,无需重新部署,但是新增类、或者修改方法名称是不行的,修改静态资源文件是可以的。
使用jetty-maven-plugin进行测试
配置如下:
<build> <finalName>account-web</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.8.v20121106</version> <configuration> <scanIntervalSeconds>5</scanIntervalSeconds> <webAppConfig> <contextPath>/test</contextPath> </webAppConfig> </configuration> </plugin> </plugins> </build>上述配置意思是,每5秒检查一次代码是否有变更,服务的访问路径为/test,
配置完成后,用mvn jetty:run 或者 mvn jetty:run -Djetty.port=9999 指定端口启动,默认端口是8080,值得一说的是,要使用上述命令启动,需要配置maven的settings.xml,配置如下:
<pluginGroups>
<pluginGroup>org.mortbay.jetty</pluginGroup>
</pluginGroups>
该配置解决的问题是,是jetty插件别名生效,插件别名的使用与maven的机制有关,请观看其他章节的介绍。
使用cargo实现自动化部署
部署至本地web容器,有两种方式:
1.standalone:从web容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的使用,这个目录会被清空,所有配置被重新生成。
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.6.6</version> <configuration> <container> web容器的类型和版本,这个值插件有定义不是自定义的名字 <containerId>tomcat7x</containerId> 本地容器路径 <home>D:\WorkSpace\apache-tomcat-7.0.64-maven</home> </container> <configuration> 设置本地部署方式 <type>standalone</type> 设置本地部署目录 <home>${project.build.directory}/tomcat7x</home> 指定端口 <properties> <cargo.servlet.port>8082</cargo.servlet.port> </properties> </configuration> </configuration> </plugin>使用mvn cargo:run 或者start发布并启动容器。
2.existing:用户需要指定现有的web容器目录,然后使用这些配置,将应用部署到其对应的位置。
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.6.6</version> <configuration> <container> <!--web容器的类型和版本,这个值插件有定义不是自定义的名字--> <containerId>tomcat7x</containerId> <!--本地容器路径--> <home>D:\WorkSpace\apache-tomcat-7.0.64-maven</home> </container> <configuration> <!--设置本地部署方式--> <type>existing</type> <!--设置本地部署目录--> <home>D:\WorkSpace\apache-tomcat-7.0.64-maven</home> </configuration> </configuration> </plugin>使用mvn cargo:run 或者start发布并启动容器。
部署至远程web容器
处理让cargo直接管理本地web容器然后部署应用之外,也可以用cargo部署应用至远程的正在运行的web容器中,前提是有该web容器的管理员权限。配置如下:
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.6.6</version> <configuration> <container> <!--web容器的类型和版本,这个值插件有定义不是自定义的名字--> <containerId>tomcat7x</containerId> <type>remote</type> </container> <configuration> <!--设置远程部署方式--> <type>runtime</type> <properties> <cargo.remote.username>admin</cargo.remote.username> <cargo.remote.password>admin123</cargo.remote.password> <cargo.tomcat.manager.url>http://localhost:8080/manager</cargo.tomcat.manager.url> </properties> </configuration> </configuration> </plugin>使用命令:mvn cargo:redeploy 执行部署,使用这个功能需要配置tomcat用户、角色等信息。