Maven 定义目标依赖项,运行 在 versions:set 之前初始化
Maven define goal dependencies, run initialize before versions:set
我在外部文件中包含一个新版本 属性 使用:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<!-- Read in newVersion.properties instead of newVersion property -->
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${session.executionRootDirectory}/newVersion.properties</file>
</files>
</configuration>
</execution>
</plugin>
我还使用 versions:set 从 CI 构建中设置新版本的代码。
如果我 运行:
mvn -DBUILD_NUMBER=99 initialize versions:set
IOW,我需要明确指定 "initialize" 目标,否则它会停止并提示我输入新版本,因为它默认 运行 在初始化目标之前设置 versions:set 目标。
如何将初始化目标定义为 versions:set 目标的依赖项?
IMO 我不需要定义中间目标顺序。
注意,我知道我可以使用版本插件来完成所有这些,但我需要从父 gradle 脚本管理 gradle 和 maven 版本,所以我需要基本的 newVersion来自外部来源,以便我可以在多个构建环境中使用它。
Re mvn ... initialize ...
– 您将 properties-maven-plugin
的 read-project-properties
目标绑定到 validate
阶段,因此 mvn validate
应该足够了。 (Introduction to the Build Lifecycle, Default Lifecycle).
在没有任何阶段的情况下调用 mvn ... versions:set
直接执行 versions
插件的 set
目标,而不经过默认生命周期(的任何阶段)。这意味着它不会在初始化之前“默认为运行 versions:set目标”,它不会通过initialize
阶段(initialize
是 阶段 根本不是目标。
在 Versions Maven Plugin, Basic Usage 处还有以下内容:
Maven 2.0, 2.1, 2.2 and 3.0 do not currently support re-reading modifications of the pom.xml
within one invocation of Maven.
The following goals:
- versions:set
- ...
modify the pom.xml
file, you need to run these goals separately from any other goals or life-cycle phases.
我不知道有什么方法可以将阶段定义为目标的依赖性,但您可以声明:
<build>
<defaultGoal>...</defaultGoal>
- defaultGoal: the default goal or phase to execute if none is given. If a goal is given, it should be defined as it is in the command line (such as jar:jar). The same goes for if a phase is defined (such as install).
我在外部文件中包含一个新版本 属性 使用:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<!-- Read in newVersion.properties instead of newVersion property -->
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${session.executionRootDirectory}/newVersion.properties</file>
</files>
</configuration>
</execution>
</plugin>
我还使用 versions:set 从 CI 构建中设置新版本的代码。
如果我 运行:
mvn -DBUILD_NUMBER=99 initialize versions:set
IOW,我需要明确指定 "initialize" 目标,否则它会停止并提示我输入新版本,因为它默认 运行 在初始化目标之前设置 versions:set 目标。
如何将初始化目标定义为 versions:set 目标的依赖项?
IMO 我不需要定义中间目标顺序。
注意,我知道我可以使用版本插件来完成所有这些,但我需要从父 gradle 脚本管理 gradle 和 maven 版本,所以我需要基本的 newVersion来自外部来源,以便我可以在多个构建环境中使用它。
Re mvn ... initialize ...
– 您将 properties-maven-plugin
的 read-project-properties
目标绑定到 validate
阶段,因此 mvn validate
应该足够了。 (Introduction to the Build Lifecycle, Default Lifecycle).
在没有任何阶段的情况下调用 mvn ... versions:set
直接执行 versions
插件的 set
目标,而不经过默认生命周期(的任何阶段)。这意味着它不会在初始化之前“默认为运行 versions:set目标”,它不会通过initialize
阶段(initialize
是 阶段 根本不是目标。
在 Versions Maven Plugin, Basic Usage 处还有以下内容:
Maven 2.0, 2.1, 2.2 and 3.0 do not currently support re-reading modifications of the
pom.xml
within one invocation of Maven.The following goals:
- versions:set
- ...
modify the
pom.xml
file, you need to run these goals separately from any other goals or life-cycle phases.
我不知道有什么方法可以将阶段定义为目标的依赖性,但您可以声明:
<build>
<defaultGoal>...</defaultGoal>
- defaultGoal: the default goal or phase to execute if none is given. If a goal is given, it should be defined as it is in the command line (such as jar:jar). The same goes for if a phase is defined (such as install).