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-pluginread-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).

参见 POM Reference, The BaseBuild Element Set