用于项目语义版本控制的Maven插件

时间:2013-12-26 11:00:12

标签: java eclipse maven maven-plugin

我正在寻找一个maven插件,它可以帮助我管理在CI环境中进行的每个构建的版本名称和代码。能够将前缀附加到主版本代码甚至更新它的东西(不改变pom.xml)。例如:

project version: 2.0.1
git/svn revision: 2342334

jar output: name-2.0.1-2342334.jar
maven repo: ../path/to/local/maven/repo/<package path>/2.0.1-2342334/

此插件的主要要求是:

  • 必须在Maven存储库中(这意味着在我的pom.xml中添加此插件并运行maven不需要其他设置)
  • 每次应用时都不得编辑pom
  • 配置文件很棒,所以我可以管理版本控制过程
  • 必须能够编辑输出文件元数据(因此版本将被应用,就像它首先写在pom.xml文件中一样)

到目前为止,我发现只有maven-buildmetadata-pluging但不幸的是,它不在Maven Repo中,所以我被卡住了。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

使用NexusArtifactory托管您自己的maven存储库非常简单。你也可以使用Artifactory cloud version(我不隶属于他们......),这样可以解决你的问题。顺便说一句 - 一个使用Apache的简单服务器也可以做到这一点,但需要做更多工作..,

关于插件:如果部署快照应用程序,则每个应用程序都会根据时间戳获取自己的版本。

对于版本,另一个选项是运行svn info并将结果(或部分)放入生成的工件中。然后可以通过代码访问该信息。

答案 1 :(得分:2)

如果您更改工件的版本,则pom必须反映更改,否则会导致无法再现。

如果你在构建过程中改变某些东西(比如添加版本,无论如何),它必须反映在pom文件中。否则,您无法使用相同的结果重现构建过程。

您已写过不要更改pom文件,而是保留单独的文件。所以问题是:为什么不使用pom文件本身,因为它的目的正是为了那个目的。

此外,maven-buildmetadata-plugin提到的所有信息都可以通过使用现有的maven插件(如build-helper-maven-plugin,buildnumber-maven-plugin)来实现。

可以使用提供SCM修订号(SVN或GIT哈希)等信息的buildnumber-maven-plugin来使用SCM信息。

另一方面,如果您不想手动更改pom文件,可以使用versions-maven-pluginmaven-release-plugin自动更改pom文件中的信息并处理所有这些信息事情自动发生。

要在生产的工件中维护元数据,您可以配置所有插件(如ear,war,jar)等等或多或少像buildbumber来自buildnumber-maven-plugin:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>${maven-jar-plugin.version}</version>
      <configuration>
        <archive>
          <addMavenDescriptor>true</addMavenDescriptor>
          <index>true</index>
          <manifest>
            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
          </manifest>
          <manifestEntries>
            <artifactId>${project.artifactId}</artifactId>
            <groupId>${project.groupId}</groupId>
            <version>${project.version}</version>
            <buildNumber>${buildNumber}</buildNumber>
          </manifestEntries>
        </archive>
      </configuration>
    </plugin>

当然,如果您真的想使用Maven,您必须使用已经提到的存储库管理器,例如Artifactory或Nexus,这会让生活更轻松。

答案 2 :(得分:0)

我只想补充一下(尽管这个问题已有5年历史了,而且已经有了一个可以接受的答案)Buildmetadata Maven Plugin最初在Maven Repo上不可用,但是现在(自2013年底开始) 。想尝试一下的人可以在以下位置找到工件:

  1. com.redhat.rcm.maven.plugin:buildmetadata-maven-plugin
  2. de.smartics.maven.plugin:buildmetadata-maven-plugin

请注意,由于naming conventions,名称已从maven-buildmetadata-plugin更改为buildmetadata-maven-plugin。

我是smartics上此插件的“原创”作者之一。如果您想使用它,则可能要使用fork provided by Red Hat。据我所知,这两个版本差别不大,它们have not been synced since there is just so much other stuff to do和插件似乎功能稳定。 ;-)

两个版本的源代码也可以在GitHub上获得:

  1. release-engineering/buildmetadata-maven-plugin
  2. smartics/buildmetadata-maven-plugin