2009-08-04 110 views
10

我试图将svn.revision添加到项目版本作为内部版本号,并且似乎无法这样做。我的jar具有durin包装的正确名称,但它安装在我的本地存储库中,就好像$ {buildNumber}在设置版本时是/未定义的。我可以使用buildnumber-maven-plugin设置项目版本吗?

我得到富-1.0.0-SNAPSHOT- $ {} buildNumber的代替富-1.0.0-SNAPSHOT-

任何想法,我做错了或正在添加的修订到项目版本一个坏主意?谢谢您的帮助。

<project> 
    ... 
    <version>1.0.0-${release.identifier}-${buildNumber}</version> 
    <properties> 
    <release.identifier>SNAPSHOT</release.identifier> 
    </properties> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>buildnumber-maven-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>useLastCommittedRevision</id> 
      <goals> 
       <goal>create</goal> 
      </goals> 
      <configuration> 
       <useLastCommittedRevision>true</useLastCommittedRevision> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    ... 
</project> 

回答

8

的问题有两个部分:

  1. 你试图将buildNumber设置到版本之前它被解决,这样它总是会${buildNumber}而不是解析值。

    您应该将buildNumber设置为构建中的finalName元素,而不是尝试动态更改版本。这将在本地存储库中创建具有预期名称的工件。

  2. 安装插件将忽略finalName并将其部署为1.0.0-SNAPSHOT不管我是否知道解决该问题的方法。如果您按如下所示配置插件,则buildNumber已添加到清单中。

    所以,你的配置是这样的:

    <version>1.0.0-${release.identifier}</version> 
    ... 
    <build> 
        <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> 
        ... 
    </build> 
    

我会避免使用SNAPSHOT项目的内部版本号。

Maven提供了SNAPSHOT关键字来表示活跃开发中的一个易变项目。因此,如果您参考具有SNAPSHOT依赖项版本的项目,Maven将自动检查更新并保持您的依赖关系同步。

如果您随后将版本号添加到该版本的末尾,您将不得不手动更新依赖项,以免失去使用SNAPSHOT后缀的好处。

我个人尽可能避免使用内部版本号。如果我必须更新一个项目,我只是碰撞版本号,或使用后缀beta-2RC2。如果您需要跟踪SNAPSHOT中的修订版,我建议将其添加到清单中,以便检查构建版本的起源,但使用标准SNAPSHOT后缀来允许Maven正常解析版本。以下配置显示如何将修订添加到清单。

就你的配置而言,我认为假设你的SCM URL设置正确。如果您的POM中没有SCM配置,可能是问题所在。

你可以运行-X并检查插件的任何输出,指出为什么它没有设置属性?

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>maven-buildnumber-plugin</artifactId> 
    <version>0.9.4</version> 
    <executions> 
    <execution> 
     <id>useLastCommittedRevision</id> 
     <phase>validate</phase> 
     <goals> 
     <goal>create</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <archive> 
     <manifest> 
     <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
     </manifest> 
     <manifestEntries> 
     <Implementation-Build>${buildNumber}</Implementation-Build> 
     </manifestEntries> 
    </archive> 
    </configuration> 
</plugin> 
3

buildnumber-maven-plugin后补充一点:

<plugin> 
    <groupId>io.github.michaldo</groupId> 
    <artifactId>nashorn-maven-plugin</artifactId> 
    <version>0.0.1</version> 
    <executions> 
     <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>eval</goal> 
      </goals> 
      <configuration> 
       <script> 
        $project.artifact.version = "${buildNumber}"; 
       </script> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

而且buildNumber将被包装的认可和部署。

+0

谢谢。 Fyi,在转换到git之后,我们开始从jenkins传递构建器,因为git使构建编号不那么流利 – 2017-01-15 15:46:19

相关问题