我一直遇到使用maven部署多模块项目的问题,需要跳过某些模块,我需要在构建完所有模块后进行部署。
有关详细信息,请使用Maven版本3.3.3和Maven部署插件的2.8.2版。
我尝试通过Jenkins使用mvn clean deploy -U -DdeployAtEnd=true
部署模块。
我的模块的示例POM:
<project>
<groupId>com.parent</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>child-A</module>
<module>child-B</module>
<module>child-C</module>
<module>child-D</module>
</modules>
</project>
<project>
<parent>
<groupId>com.parent</groupId>
<artifactId>com.parent</artifactId>
<version>com.parent</version>
</parent>
<artifactId>child-A</artifactId>
<modules>
<module>grandChild-A/<module>
<module>grandChild-B/<module>
<module>grandChild-C/<module>
<module>grandChild-D/<module>
</modules>
</project>
子B有一个子模块(孙子E)但C和D没有。
这些都没有子模块。
如何定义部署插件的示例:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
<executions>
</project>
此插件用于每个模块,但跳过配置合并为儿童B-D和孙子E。
当使用deployAtEnd选项时,部署插件会在每个reactor项目成功构建后将其放入列表中,并且如果它没有设置跳过配置。然后它在最后部署所有模块。
该插件使用计数器READYPROJECTSCOUNTER
,该计数器初始化为private static final AtomicInteger
,以确定何时构建了所有项目。
然而,当我尝试部署我的项目时,会创建两个计数器迭代。一个为父母和孩子增加,另一个为孙子增加。
因此,当它根据项目列表的大小检查计数器时,只检查其中一个计数器,并且由于计数器没有达到项目列表大小,因此部署过程不会启动。
是否还有其他人遇到类似这样的事情,或者,如果没有,任何人都能解释为什么计数器初始化两次(即为什么这个过程分成两个独立的实例)?