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

Ram*_*mon 6 java maven

我有一个传统的maven设置与父项目和许多模块什么是子项目.当我这样做时mvn deploy,它按顺序(深度优先)运行整个生命周期(包括test)到deploy每个项目.如果任何项目无法构建,我想避免部署任何子项目.换句话说,我希望deploy整个父项目的"全有或全无".有没有办法实现这个目标?

Aar*_*lla 8

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)

要旨


Ste*_*lly 3

如果您的远程存储库是 Sonatype Nexus Pro 实例,那么 Nexus Pro 的“暂存”功能将允许原子发布到正确的存储库。

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

最后,我对 mrm-maven-plugin @ codehaus 的中长期目标之一是允许本地分阶段部署,以便您能够执行类似的操作

mvn mrm:catch-deploy deploy mrm:push-deploy
Run Code Online (Sandbox Code Playgroud)

最后一篇还没有写!