6

我有一个公司范围的父 pom,<dependencyManagement>其中定义了应该在整个应用程序中使用的项目版本,其中一些是 SNAPSHOT,有点像这样:

<dependencyManagement>
  <dependencies>
    ...
    <dependency>
      <groupId>my.group</groupId>
      <artifactId>myArtifact</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    ...
  <dependencies>
</dependencyManagement>

当我release:prepare在父 pom 上运行时,这些 SNAPSHOT 不会被删除。结果是继承自父项的项目在发布时无法使用其版本。如何确保在<dependencyManagement>发布时更新父 pom 的部分?

我看到了这个问题:为什么 maven 发布插件允许依赖管理中的 SNAPSHOT 版本?,但提到的票声称在插件的早期版本中已修复。

Maven Release Plugin 2.3.1
Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)
Java version: 1.6.0_31, vendor: Sun Microsystems Inc.
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
4

2 回答 2

1

因此,您正在尝试发布不属于您正在准备的构建的工件?如果你做一个 relase:perform,如果它们不存在,插件应该将哪些工件上传到存储库?(如果他们这样做,为什么要放置快照版本?)。
我认为正如@khmarbaise 所说,该插件不会删除不属于您的反应器的快照(该插件可能认为它们是第三方依赖项)。

这是一条评论,我把它作为答案,因为我还没有发表评论的声誉……对不起我的英语!

于 2012-06-08T12:05:57.527 回答
1

只关心检查您的部分中maven-release-plugin是否有SNAPSHOT-s <dependencies/><dependencies/>将由扩展此父级的所有模块继承。他们总是会在构建之前尝试解决这些依赖关系。

<dependencies/>和部分之间的区别在于<dependencyManagement/>后者仅定义将使用的版本。这就是说,如果您在那里定义了 -s,则发布插件根本不关心SNAPSHOT,除非该父项目是聚合器或聚合器的一部分,并且该父项目与聚合器一起作为一个整体发布。

同样,maven-release-plugin 也不处理<pluginManagement/>. 另外,我相信它仅在与<dependencies/>.

SNAPSHOT更糟糕的是——据我所知——如果依赖项/插件有一个版本,如果它在一个<*Management/>部分中,你甚至不会收到警告。

出于这个原因,我采用的方法是拥有一个<properties/>包含工件版本的父 POM。SNAPSHOT在发布它之前,我使用 grep扫描它以查找-s:

grep SNAPSHOT pom.xml
于 2012-06-08T13:37:10.757 回答