maven-release-plugin 目标在多模块项目的子模块中被忽略
maven-release-plugin goals ignored in submodule in multi-module project
我有一个多模块 Maven 项目。项目布局如下
project/
pom.xml
types/
pom.xml
client/
pom.xml
service/
pom.xml
types
和 client
模块构建为 JAR,service
构建为 WAR。我正在使用 maven-release-plugin 创建该项目的新版本。我 喜欢 让发布插件在执行 service
模块的发布时调用额外的目标。
发布插件在根 pom 中配置如下(没什么特别的):
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>
... 并在 service
pom 中像这样配置以及我试图通过 <goals>
参数调用的插件:
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<goals>deploy dockerfile:build dockerfile:push</goals>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>12345.ecr.us-east-1.amazonaws.com/project</repository>
</configuration>
</plugin>
我的想法是,我想为 service
模块构建一个 Docker 图像,但为项目中的其他模块构建图像没有意义。但是,在切割新版本时,永远不会调用 service
pom 文件中的目标配置。
Maven 版本:3.3.3
maven-release-plugin: 2.5.3
JDK:Oracle 1.8.0u144
正在使用的命令:
mvn -Pstaging -B clean release:clean release:prepare release:perform
我无法共享此命令的输出。
我已确认相关配置似乎已通过
应用
mvn -Pstaging help:effective-pom
我的问题是:发布插件是否可以实现我想要实现的目标?我没有发现任何表明这是不可能的问题或文章。
请注意,我从未使用过 dockerfile-maven-plugin
,请尝试发布配置文件而不是目标。
第 1 步。在 project/pom.xml
中编辑发布插件配置。
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version> <!-- should define in pluginManagement -->
<configuration>
<releaseProfiles>publish-docker</releaseProfiles>
<!-- other plugin config -->
</configuration>
</plugin>
为配置文件选择一个有意义的名称。我将使用 publish-docker 作为此处的名称。
第 2 步。将具有该名称的配置文件添加到 service/pom.xml
:
<profiles>
<profile>
<id>publish-docker</id>
<build>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>12345.ecr.us-east-1.amazonaws.com/project</repository>
</configuration>
<executions>
<execution>
<id>docker-publish</id>
<phase>deploy</phase> <!-- important -->
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</build>
</profile>
</profiles>
此配置文件包括将 dockerfile:build
和 dockerfile:push
目标绑定到 deploy
阶段的插件配置。发布插件将为每个模块启用 publish-docker 配置文件。该配置文件将仅存在于 service
模块中,因此它将 运行.
我注意到另一件事。在发布命令中:
mvn -Pstaging -B clean release:clean release:prepare release:perform
我怀疑 -Pstaging
部分在发布期间并未实际应用。发布插件为每个目标分叉另一个进程 运行。要将参数传递给 fork,需要 arguments
参数:
mvn -Pstaging -Darguments="-Pstaging" -B clean release:clean release:prepare release:perform
我有一个多模块 Maven 项目。项目布局如下
project/
pom.xml
types/
pom.xml
client/
pom.xml
service/
pom.xml
types
和 client
模块构建为 JAR,service
构建为 WAR。我正在使用 maven-release-plugin 创建该项目的新版本。我 喜欢 让发布插件在执行 service
模块的发布时调用额外的目标。
发布插件在根 pom 中配置如下(没什么特别的):
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>
... 并在 service
pom 中像这样配置以及我试图通过 <goals>
参数调用的插件:
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<goals>deploy dockerfile:build dockerfile:push</goals>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>12345.ecr.us-east-1.amazonaws.com/project</repository>
</configuration>
</plugin>
我的想法是,我想为 service
模块构建一个 Docker 图像,但为项目中的其他模块构建图像没有意义。但是,在切割新版本时,永远不会调用 service
pom 文件中的目标配置。
Maven 版本:3.3.3
maven-release-plugin: 2.5.3
JDK:Oracle 1.8.0u144
正在使用的命令:
mvn -Pstaging -B clean release:clean release:prepare release:perform
我无法共享此命令的输出。
我已确认相关配置似乎已通过
应用mvn -Pstaging help:effective-pom
我的问题是:发布插件是否可以实现我想要实现的目标?我没有发现任何表明这是不可能的问题或文章。
请注意,我从未使用过 dockerfile-maven-plugin
,请尝试发布配置文件而不是目标。
第 1 步。在 project/pom.xml
中编辑发布插件配置。
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version> <!-- should define in pluginManagement -->
<configuration>
<releaseProfiles>publish-docker</releaseProfiles>
<!-- other plugin config -->
</configuration>
</plugin>
为配置文件选择一个有意义的名称。我将使用 publish-docker 作为此处的名称。
第 2 步。将具有该名称的配置文件添加到 service/pom.xml
:
<profiles>
<profile>
<id>publish-docker</id>
<build>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>12345.ecr.us-east-1.amazonaws.com/project</repository>
</configuration>
<executions>
<execution>
<id>docker-publish</id>
<phase>deploy</phase> <!-- important -->
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</build>
</profile>
</profiles>
此配置文件包括将 dockerfile:build
和 dockerfile:push
目标绑定到 deploy
阶段的插件配置。发布插件将为每个模块启用 publish-docker 配置文件。该配置文件将仅存在于 service
模块中,因此它将 运行.
我注意到另一件事。在发布命令中:
mvn -Pstaging -B clean release:clean release:prepare release:perform
我怀疑 -Pstaging
部分在发布期间并未实际应用。发布插件为每个目标分叉另一个进程 运行。要将参数传递给 fork,需要 arguments
参数:
mvn -Pstaging -Darguments="-Pstaging" -B clean release:clean release:prepare release:perform