Maven定义目标依赖项,在版本之前运行初始化:set

时间:2015-09-04 22:59:03

标签: maven properties dependencies versioning

我使用以下内容将newVersion propery格式化为外部文件:

<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>

我也在使用版本:设置为从CI版本设置新版本的代码。

如果我跑:

,这是有效的
mvn -DBUILD_NUMBER=99 initialize versions:set

IOW,我需要明确指定“初始化”目标,否则它会停止并提示我输入newVersion,因为它默认运行版本:在初始化目标之前设置目标。

如何将初始化目标定义为版本的依赖关系:set goal?

IMO我不需要定义中间目标排序。

注意,我知道我可以使用版本插件来完成所有这些,但我需要从父gradle脚本管理gradle和maven版本,所以我需要基本的newVersion来自外部源,以便我可以使用它来自多个构建环境。

1 个答案:

答案 0 :(得分:1)

重新mvn ... initialize ... - 您将read-project-properties的{​​{1}}目标限制在properties-maven-plugin阶段,因此validate就足够了。 (Introduction to the Build Lifecycle, Default Lifecycle)。

在没有任何阶段的情况下调用mvn validate直接执行mvn ... versions:set插件的set目标,而不通过默认生命周期(任何阶段)。这意味着它“默认运行版本:在初始化之前设置目标”,它没有通过versions阶段(initialize是一个阶段根本不是目标)。

还有以下Versions Maven Plugin, Basic Usage

  

Maven 2.0,2.1,2.2和3.0目前不支持在一次Maven调用中重新阅读initialize的修改。

     

以下目标:

     
      
  • 版本:设置
  •   
  • ...
  •   
     

修改pom.xml文件,您需要将这些目标与任何其他目标或生命周期阶段分开运行。

我不知道有任何方法可以将某个阶段定义为目标的依赖关系,但您可以声明:

pom.xml
  
      
  • defaultGoal:如果没有给出,则执行默认目标或阶段。如果给出了目标,则应该在命令行中定义它(例如jar:jar)。如果定义了阶段(例如安装),情况也是如此。
  •   

请参阅POM Reference, The BaseBuild Element Set