【问题标题】:Maven Plugin for project semantic versioning用于项目语义版本控制的 Maven 插件
【发布时间】:2014-01-14 00:57:18
【问题描述】:

我正在寻找一个 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 中,所以我被卡住了。任何帮助都会很棒。

【问题讨论】:

    标签: java eclipse maven maven-plugin


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答,但问题不在于为这些目的设置 Nexus 或其他任何东西。问题是一个项目可以有更多的构建环境。例如,客户可以在他身边构建整个应用程序。但是我没有(也不能)访问所有的 douse 构建环境。这就是需要一个全局 maven repo 的方式。
    • 您应该使用自定义属性来标记不同的工件。例如使用 Artifactory,您可以 attach properties during Maven deploy.
    【解决方案2】:

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

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

    你写的不是改变 pom 文件而是维护一个单独的文件。所以问题是:为什么不使用 pom 文件本身,因为它正是为此目的而设计的。

    此外,您在 maven-buildmetadata-plugin 中提到的所有信息都可以通过使用现有的 maven 插件(如 build-helper-maven-plugin、buildnumber-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>
    

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

    【讨论】:

      【解决方案3】:

      我只是想补充一下(尽管这个问题已经存在 5 年了,并且已经有一个公认的答案)Buildmetadata Maven Plugin 最初在 Maven 回购中不可用,但现在(自 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

      【讨论】:

        猜你喜欢
        • 2017-04-16
        • 1970-01-01
        • 2011-04-27
        • 2019-10-18
        • 1970-01-01
        • 2023-02-11
        • 2017-06-01
        • 2017-01-01
        • 2014-09-09
        相关资源
        最近更新 更多