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

Ser*_*ici 5 java eclipse maven-plugin maven

我正在寻找一个 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/
Run Code Online (Sandbox Code Playgroud)

这个插件的主要要求是:

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

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

khm*_*ise 2

如果您更改工件的版本,pom 必须反映更改,否则它将无法重现。

如果您在构建过程中更改了某些内容(例如添加的版本等),则它必须反映在 pom 文件中。否则,您将无法以相同的结果重现构建过程。

您编写的内容不是更改 pom 文件,而是维护一个单独的文件。所以问题是:为什么不使用 pom 文件本身,因为它正是用于此目的。

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

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

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

要维护生产的工件中的元数据,您可以配置所有插件(例如ear,war,jar)等。或多或少像这样,其中buildNumber来自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>
Run Code Online (Sandbox Code Playgroud)

当然,如果你真的喜欢使用 Maven,你应该使用已经提到过的存储库管理器,比如 Artifactory 或 Nexus,它们会让生活变得更轻松。