我有一个传统的maven设置与父项目和许多模块什么是子项目.当我这样做时mvn deploy,它按顺序(深度优先)运行整个生命周期(包括test)到deploy每个项目.如果任何项目无法构建,我想避免部署任何子项目.换句话说,我希望deploy整个父项目的"全有或全无".有没有办法实现这个目标?
Maven本身不能这样做(还).目前,构建过程单独运行每个模块上的所有目标.有计划允许目标看到全局,但这可能是Maven 4.
同时,您可以使用一个小shell脚本:
mvn clean install && mvn deploy -DskipTests=true
Run Code Online (Sandbox Code Playgroud)
第一次运行构建了一切.第二次运行不会做太多(所有代码都已编译并且跳过长测试),所以它非常快.
我实际上更喜欢这种方法,因为我的脚本还将任何现有distributionManagement元素替换为我公司缓存的元素.这意味着我可以为公司部署任何项目,而无需对原始POM进行任何更改.这是脚本:
#!/bin/bash
if [[ ! -e pom.xml ]]; then
echo "Missing pom.xml" 1>&2
exit 1
fi
sed \
-e '/<distributionManagement>/,/<\/distributionManagement>/d' \
-e '/<\/project/d' \
pom.xml > pom-deploy.xml || exit 1
cat >> pom-deploy.xml <<EOF
<!-- ADDED BY $0 -->
<distributionManagement>
... whatever you need ...
</distributionManagement>
</project>
EOF
mvn -f pom-deploy.xml clean install && \
mvn -f pom-deploy.xml deploy -DskipTests=true && \
rm pom-deploy.xml
exit 0
Run Code Online (Sandbox Code Playgroud)
如果您的远程存储库是 Sonatype Nexus Pro 实例,那么 Nexus Pro 的“暂存”功能将允许原子发布到正确的存储库。
如果您使用 Jenkins,有一个延迟部署插件,它将部署您的所有工件作为构建后(或构建后)操作(不太介意您使用哪个存储库管理器)
最后,我对 mrm-maven-plugin @ codehaus 的中长期目标之一是允许本地分阶段部署,以便您能够执行类似的操作
mvn mrm:catch-deploy deploy mrm:push-deploy
Run Code Online (Sandbox Code Playgroud)
但最后一篇还没有写!
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |