浏览 1976 次
锁定老帖子 主题:Maven如何指定工程进行单元测试构建
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-07
最后修改:2011-06-07
去查找这个问题,是因为在使用hudson的持续集成环境时,执行下面的命令: mvn clean compile test sonar:sonar 总是会报,类似的工程依赖的错误: 1) com.alibaba.china.app:avatar.bundle.war:war:1.0-SNAPSHOT Try downloading the file manually from the project website. Then, install it using the command: mvn install:install-file -DgroupId=com.alibaba.china.app -DartifactId=avatar.bundle.war -Dversion=1.0-SNAPSHOT -Dpackaging=war -Dfile=/path/to/file Alternatively, if you host your own repository you can deploy the file there: mvn deploy:deploy-file -DgroupId=com.alibaba.china.app -DartifactId=avatar.bundle.war -Dversion=1.0-SNAPSHOT -Dpackaging=war -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] Path to dependency: 1) com.alibaba.china.app:avatar.deploy:jar:1.0-SNAPSHOT 2) com.alibaba.china.app:avatar.bundle.war:war:1.0-SNAPSHOT ---------- 1 required artifact is missing. ,原因分析: 由于hudson的持续集成环境是整个部门进行公用,而工程的特殊性是要依赖二方库,在不同的时间段编译时,不同的需求或者项目所依赖的同一个二方库可能是不一样的,但由于mvn中指定的版本是一样的(统一用了1.0-SNAPSHOT版本),导致了在某一个时刻,一些应用的持续集成是失败的。为了解决这个问题,当时是采用了在每次工程构建时,将二方库进行清理,再进行持续构建。但这样的做法,却导致了出现上面的问题。 因为deploy工程需要从mvn仓库中寻找bundle.war工程,而bundle.war工程却是需要通过mvn install 方式将包安装到mvn 仓库,将mvn 仓库清理后,bundle.war的war包自然也找不到了,所以depoloy构建时就报错了。 分析: deploy工程在我们的应用中只是包含模板文件,部署的配置文件,是没有单元测试文件进行运行的。所以能否在构建时将指定的工程进行持续构建,不就解决了这个问题? 于是从网上搜索Maven指定工程进行编译、测试构建的方式,找到了http;l://markmail.org/message/vf3qaxnjtxelj3b2这样的一篇文章,参照里面的配置在pom文件,增加profile,并使用-P 命令进行执行,但结果却不起作用。 执行了mvn -h,找到 -pl,--projects Build specified reactor projects instead of all projects 可以对指定工程进行操作。开始试验单个工程: mvn test -pl biz/cases 发现命令行输出,只对biz/cases工程进行了单元测试,成功。 针对多个工程: mvn test -pl biz/cases biz/common 结果并没有按照预期的两个工程进行单元测试,而是直接抛出了错误,提示Invalid task错误。 猜想应该是后面的多个工程的格式有问题,因为mvn对于空格之间的内容,是当作参数来进行执行。 尝试: mvn test -pl biz/cases,biz/common 大功告成,OK。 后续的hudson配置就比较简单了,在工程配置界面里,填写的mvn命令下,增加-pl选项,将你想要执行构建的工程加上去,之后点击保存,再重新构建。如图: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |