结合Maven2进行J2EE项目构建(二)开发人员要使用内部仓库,只需修改本地工程pom.xml ,在 repository 配置后
结合Maven2进行J2EE项目构建(二)
开发人员要使用内部仓库,只需修改本地工程pom.xml ,在 repository 配置后加上:
<repository> <id>companyName</id> <url>http:// ${ip}/maven</url></repository>
3.每日构建
为了保证项目质量,尽早的发现项目中的bug,我们需要每日对系统进行构建,这也是我们使用maven的初衷之一,maven的几个命令就可帮助我们完成这项任务,当然我们可以使用持续构建工具与maven结合实现定时自动构建。构建方式:
mvn testmvn packagemvn install
maven 会自动编译,测试,运行所有的testcase,这也要求我们的开发人员一定要按照规则编写单元测试代码,否则每日构建的意义就不大了。appfuse框架中提供了很好的单元测试代码,包括针对数据库层,业务逻辑层,web展示层等等,如果我们能很好的编写这些单元测试,那么对于系统后续的缺陷管理和控制是大有裨益的。
构建完成后或构建时需要对最新版本的项目进行部署,便于次日安排测试人员进行测试,maven提供多多种部署方式,在 pom.xml进行项目的部署配置,不同的部署方式根据协议的不同,配置方式也有所差异:
以文件方式部署
<project> [...] <distributionManagement> <repository> <id>proficio-repository</id> <name>Proficio Repository</name> <url>file://${basedir}/target/deploy</url> </repository> </distributionManagement> [...] </project>
以SSH2方式部署
<project> [...] <distributionManagement> <repository> <id>proficio-repository</id> <name>Proficio Repository</name> <url>scp://sshserver.yourcompany.com/deploy</url> </repository> </distributionManagement> [...] </project>
以SFTP方式部署
<project> [...] <distributionManagement> <repository> <id>proficio-repository</id> <name>Proficio Repository</name> <url>sftp://ftpserver.yourcompany.com/deploy</url> </repository> </distributionManagement> [...] </project>
以扩展SSH方式部署
目前为止上述3中方式已经被Maven包含,所以只要 distributionManagement就可以了,但是使用扩展SSH命令部署的话你不仅需要配置distributionManagement还需要一个build extension,如下
<project> [...] <distributionManagement> <repository> <id>proficio-repository</id> <name>Proficio Repository</name> <url>scpexe://sshserver.yourcompany.com/deploy</url> </repository> </distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh-external</artifactId> <version>1.0-alpha-6</version> </extension> </extensions> </build> [...] </project>
The build extension specifies the use of the Wagon external SSH provider, which does the work of moving your files to the remote server. Wagon is the general purpose transport mechanism used throughout Maven.
The build extension specifies the use of the Wagon external SSH provider, which does the work of moving your files to the remote server. Wagon is the general purpose transport mechanism used throughout Maven.
以FTP方式部署
<project> [...] <distributionManagement> <repository> <id>proficio-repository</id> <name>Proficio Repository</name> <url>ftp://ftpserver.yourcompany.com/deploy</url> </repository> </distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ftp</artifactId> <version>1.0-alpha-6</version> </extension> </extensions> </build> [...] </project>
一旦你配置好了相应的POM你可以执行下列命令来开始部署:
mvn deploy
同时也可通过执行一下命令生成此项目的站点报告,供项目参与人员使用。
mvn site
三. 结论
maven的强大显而易见,有很多其他的特性本文没有提及,如对各类插件的支持,以及对项目模块划分和继承关系的管理,这些都是maven的特性,也是 maven对项目生命周期的详尽诠释,有兴趣深入的TX可以下载我在附件中提供的教程《Better Builds With Maven2》.同时我也提供我根据appfuse建立的一套项目框架,可在myeclipse环境下使用,大家可以共同探讨完善。
附 1:使用artifactory为Maven2团队开发建立内部开发仓库详解
在真正使用Maven后是为团队进行定制,所以我们不应使用官网的开发库,应在本地建立一个内部开发库对团队的jar包进行管理,所以我们首先搭建一个内部库环境,除文章上面所述的搭建Apache服务器方法外,我们还可以使用artifactory(下载地址:http://www.jfrog.org/sites/artifactory /latest/),一个很好的maven内部库的应用系统,下载后执行bin目录下的artifactory.bat命令即可。启动后可访问控制台http://内部库 ip:8081/artifactory/验证服务是否成功启动。默认的用户名为admin,密码为 password。artifactory最重要的是可配置第三方jar包,在deploy artifacts中加入并制定其groupId和artifactId即可
(不要忘记更改本地的pom.xml文件引入新加的jar包)。
在开发端我们需要更改全局配置文件setting.xml文件,将工程中setting.xml放入本地maven2->conf目录下,配置内部仓库的地址,只需要在setting.xml的mirrors元素中加入以下配置:
<mirror> <id>emay local</id> <mirrorOf>central</mirrorOf> <name>emay local artifactory</name> <url>http://内部库ip:8081/artifactory/repo</url> </mirror>
这里要注意的是,在加入这段代码后我使用的appfuse框架中自带的应用服务器tomcat6进行构建,不能正常运行,报tomcat出错,把这段去掉或者在pom.xml中将应用服务器改为tomcat5.5后运行正常。看来maven还是有不少bug需要改进。
配置完成后再运行mvn install即可正常进行构建,maven会从本地内部库中寻找项目所依赖的jar包。运行mvn clean清除maven生成文件。
附2:maven2命令大全
validate,验证工程是否正确,所有需要的资源是否可用。
compile,编译项目的源代码。
test-compile,编译项目测试代码。
test,使用已编译的测试代码,测试已编译的源代码。
package,已发布的格式,如jar,将已编译的源代码打包。
integration-test,在集成测试可以运行的环境中处理和发布包。
verify,运行任何检查,验证包是否有效且达到质量标准。
install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
generate-sources,产生应用需要的任何额外的源代码,如xdoclet。