Java 让maven父项目在部署任何模块之前测试所有模块

Java 让maven父项目在部署任何模块之前测试所有模块,java,maven,Java,Maven,我有一个传统的maven设置,带有父项目和许多模块,这些模块都是子项目。当我执行mvn部署时,它会按顺序(深度优先)为每个项目运行整个生命周期(包括test),直到deploy)。如果任何项目无法构建,我希望避免部署任何子项目。换句话说,我希望整个父项目的deploy是“要么全部,要么什么都没有”。有什么办法可以做到这一点吗?Maven本身还不能做到这一点。目前,构建过程单独运行每个模块上的所有目标。有计划让目标看到大局,但这可能是Maven 4 同时,您可以使用一个小shell脚本: mvn

我有一个传统的maven设置,带有父项目和许多模块,这些模块都是子项目。当我执行
mvn部署
时,它会按顺序(深度优先)为每个项目运行整个生命周期(包括
test
),直到
deploy
)。如果任何项目无法构建,我希望避免部署任何子项目。换句话说,我希望整个父项目的
deploy
是“要么全部,要么什么都没有”。有什么办法可以做到这一点吗?

Maven本身还不能做到这一点。目前,构建过程单独运行每个模块上的所有目标。有计划让目标看到大局,但这可能是Maven 4

同时,您可以使用一个小shell脚本:

 mvn clean install && mvn deploy -DskipTests=true
第一次运行构建所有内容。第二次运行没有什么作用(所有的代码都已经编译好了,长时间的测试都被跳过了),所以运行速度非常快

实际上,我更喜欢这种方法,因为我的脚本还将现有的
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
#/bin/bash
如果[!-e pom.xml]];然后
echo“Missing pom.xml”1>&2
出口1
fi
塞德\
-e'//,//d'\

-e'/如果您的远程存储库是Sonatype Nexus Pro实例,那么Nexus Pro的“暂存”功能将允许原子发布到存储库中

如果您使用的是Jenkins,那么有一个延迟部署插件,它会将您的所有工件部署为构建后(或非常构建后)操作(不太介意您使用哪个存储库管理器)

最后,我对mrm maven plugin@codehaus的一个中长期目标是允许在本地进行部署分段,以便您能够执行以下操作

mvn mrm:catch-deploy deploy mrm:push-deploy

但最后一个还没有写好

我改变了这个被接受的答案,因为我认为你建议使用CI服务器而不是maven是正确的,这是我将要采取的方法。Stephen,延迟部署你指的是哪个Jenkins插件?不是指任何特定的插件