我正在使用Maven发布插件,我正在尝试发布。当我在掌握(我正在使用Git)时,我的项目(多模块)和我的依赖项(也是多模块)都有SNAPSHOT版本。
假设我想从master(跳过创建分支)创建一个没有使用SNAPSHOTs的标记。
这是我简化的pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>results</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Results parent module</name>
<modules>
<module>results-web</module>
<module>results-persistence</module>
<module>results-domain</module>
<module>results-logic</module>
<module>results-logic-api</module>
<module>results-ear</module>
<module>results-configuration</module>
<module>results-rules-ejb</module>
<module>results-rules</module>
<module>results-rest</module>
</modules>
<properties>
<dependency1.version>1.2.3-SNAPSHOT</main.version>
<dependency2.version>3.4.5-SNAPSHOT</main.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<tagNameFormat>@{project.version}</tagNameFormat>
<autoVersionSubmodules>true</autoVersionSubmodules>
<localCheckout>true</localCheckout>
<pushChanges>false</pushChanges>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.my.project</groupId>
<artifactId>dependency1-domain</artifactId>
<version>${dependency1.version}</version>
</dependency>
<dependency>
<groupId>org.my.project</groupId>
<artifactId>dependency1-enumerations</artifactId>
<version>${dependency1.version}</version>
</dependency>
<dependency>
<groupId>org.my.project</groupId>
<artifactId>dependency1-logic</artifactId>
<version>${dependency1.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>org.my.project</groupId>
<artifactId>dependency2-domain</artifactId>
<version>${dependency2.version}</version>
</dependency>
<dependency>
<groupId>org.my.project</groupId>
<artifactId>dependency2-enumerations</artifactId>
<version>${dependency2.version}</version>
</dependency>
<dependency>
<groupId>org.my.project</groupId>
<artifactId>dependency2-logic</artifactId>
<version>${dependency2.version}</version>
<type>ejb</type>
</dependency>
</dependencies>
</dependencyManagement>
如果我这样做:
mvn release:prepare -Darguments =“ - dependency1.version = 1.2.3.0 -Ddependency2.version = 3.4.5.0"
这会创建一个仍然具有SNAPSHOT依赖关系的分支:
<properties>
<dependency1.version>1.2.3-SNAPSHOT</main.version>
<dependency2.version>3.4.5-SNAPSHOT</main.version>
</properties>
如何生成上述部分的标记:
<properties>
<dependency1.version>1.2.3.0</main.version>
<dependency2.version>3.4.5.0</main.version>
</properties>
答案 0 :(得分:3)
发布插件无法更改POM中不属于reactor的依赖项版本。
试试Maven Versions Plugin。您可以使用versions:use-releases将所有快照依赖项替换为相应的版本。如果您想手动替换它们(可能是因为版本与快照不同),您可以使用版本:set。但两者都不适用于属性中提供的依赖版本。对于属性versions:update-properties,设置allowSnapshots = false。如果不需要特殊版本范围,则此目标可自动运行,但也可配置为处理此类要求。
您可以配置发布插件,使用preparaionGoals调用您的版本插件,如Stephen所述:<preparationGoals>clean versions:use-releases verify</preparationGoals>
或者您在发布之前手动调用版本插件,例如与
mvn版本:use-releases scm:checkin -Dmessage =“发布依赖项版本”
答案 1 :(得分:0)
发布插件并非旨在解决此用例。
你可以通过劫持preparationGoals
和completionGoals
来调用编辑你的pom的插件来到某个地方......当然这是我在添加{{1}时想到的用例}
但就目前而言,如果没有能够获得一个插件进行编辑并且无法使用你的pom来设置版本,那么你将需要手动编辑