当前位置: 首页 > 知识库问答 >
问题:

Maven发布和版本Maven插件

秦钟展
2023-03-14

所有POM都有1.0.0-snapshot作为它们的版本,也在dependencies标签下。它通过MVN deploy上传到Nexus repo。

我们最近开始做MVN发布。因此,所有20个父POM现在都是1.0.1-snapshot和版本1.0.0,因为它们都位于nexus中。所有 标记现在都指向1.0.0

开发人员不想指向发布版本。他们需要来自同行的edge开发版本1.0.x-snapshot,不管它是否不稳定。

SCM只希望指向release版本,因为他必须每周执行一次MVN release,但由于指向快照版本而失败。

现在我知道了版本插件,但问题是,我应该在POM中添加什么,以便双方都满意地运行自己版本的MVN versions:命令。最好,POM应该指向快照,这样15个人就会很高兴,当SCM发布时,他可以运行MVN版本:something,所有内容都转换为release版本,而不是SNAPSHOTS。然后回到开发人员的快照。

共有1个答案

颜瀚漠
2023-03-14

我把这作为一个答案,尽管目前这不是一个很有效的答案。

当我在Maven Release插件中添加CompletionGoals配置选项时,我的目标是启用开发使用版本范围的工作流,但该版本将只固定到具体的版本。

添加到Versions Maven插件中的启用目标之一是Versions:resolve-ranges目标。所缺少的是一种方法,可以在之后重新解析这些范围。

我们真的没有任何安全的地方来存放发布插件不会反对的原始范围,或者在我们再次需要它之前清理它。

我想到的最接近的解决方案是在包含版本范围的版本旁边注入XML PI...在这种情况下,pom.xml将转换为。

<project>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>com.foo.bar</groupId>
      <artifactId>manchu</artifactId>
      <version>[1.2.3,2.0)</version>
    </dependency?
    ...
  </dependencies>
  ...
</project>

<project>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>com.foo.bar</groupId>
      <artifactId>manchu</artifactId>
      <version>1.5.7</version>
      <?versions-maven-plugin allowed-version-range="[1.2.3,2.0)"?>
    </dependency?
    ...
  </dependencies>
  ...
</project>

通过确保preprationgoals包含versions:resolution-rangesgoal...(注意:版本插件可能必须使用第三个Maven来解决pom.xml重新加载的不足,以便使clean verifice有意义,尽管resolution-ranges应该在构建所使用的确切版本中解决,所以这不应该是一个问题)。

目前有一些问题阻碍了这一点:

>

  • 不确定Maven发布插件的pom重写是否会删除XML PI(需要测试来确认)

    versions-maven-plugin中的XML解析库充其量是笨拙的,需要一个更好的解决方案来启用XML PI注入

    运行您的版本MVN版本:use-releases版本:commit scm:commit release:prepare release:performe install

    那么应该发生什么:

    >

  • 我们将-snapshot切换到发行版

    释放照常执行

    我们将next development-snapshot安装到本地repo中,以便所有下游项目在运行versions:use-next-snapshots时更新其版本

    上面稍微容易出错...如果我能提供基于版本范围的解决方案,我会更愿意,但是,现在这是我能看到的最好的解决方案。

  •  类似资料:
    • 我们在maven发行版和maven版本插件上有一个问题。在詹金斯,我们想做释放自动按下一个按钮。为了消除快照依赖关系,我们希望使用maven versions插件。假设我们有两个项目A(最新版本0.0.1,最新快照0.0.2-快照)和项目B,它们依赖于Projecta-0.0.2-快照,我们希望发布项目B,我们如何将项目Bs依赖项升级到最新可用的发布版本?maven versions插件目标“us

    • 我的目标是发布一个具有单一依赖项的项目。我有一个nexus存储库,我在其中部署快照和发布版本。 我唯一的依赖性 我的nexus repo中发布了以下候选版本 当要求版本插件解决依赖关系时,它声称没有新的依赖关系可用。所以他认为 但是,如果在我的项目中有版本1.0.0-SNAPSHOT,那么版本1.1.0-RC1将解析为最新版本。 我错过了什么?(我查看了插件源代码,我们有以下片段: 对我来说这辆车

    • 我使用的是maven release插件,出现以下错误: [错误]无法执行目标组织。阿帕奇。专家plugins:maven release plugin:2.5.3:prepare(默认cli)on project***:“******”的版本未映射- 我从詹金斯那里运行这个任务,源代码在perforce中。我错过了什么?谢谢

    • 我以一个新的gradle用户的身份创建gradle版本,但我过去曾与maven合作过。 我试图重现maven发布插件的动作: 将分支版本更改为发行号(在svn提交) 如您所见,我正在使用: Nexus OSS作为版本控制库 SVN作为scm Gradle(2.8) 我正试图通过这两个插件实现我的目标: > 将分支版本更改为发行号(在svn提交) 创建标签(位于svn) 将分支版本更改为新快照编号(

    • 我试图使用目标 release:prepare 生成一个版本,但是当我在 Eclipse 上运行它时,我得到了错误: 无法执行目标org.apache.maven.plugins:maven-estes-plugin:2.0-beta-7:项目mwFramework上的准备(default-cli):无法运行目标清理验证:执行过程中出错。无法运行程序“mvn”(在目录“/home/gnng/Dev

    • 我刚刚建立了一个Maven多模块项目,其版本如中所述https://maven.apache.org/maven-ci-friendly.html 属性${revision}在父POM中设置,并在所有模块中用作版本号。 这对于快照构建很好,但当我运行Maven release插件时,版本会被类似于1.0.0的东西所取代,然后是1.0.1-SNAPSHOT。因此,cifriendly版本在一次发布后