如何在不释放父POM的情况下释放Maven子模块?

时间:2014-05-23 14:27:15

标签: java maven release snapshot maven-release-plugin

我是Java库的维护者(ta4j,它提供technical analysis的功能)。在我的存储库中,不同的模块被mavenized,我试图释放其中一个。

Maven架构

该项目的Maven架构是:

ta4j-parent
  |__ ta4j
  |__ ta4j-examples

ta4j-父

我添加了此pom.xml仅用于在licensesissueManagement以及将来{{}之间共享一些属性(ta4jta4j-examples等) 1}}。我不想发布这个工件(因为它对我的库的用户没用)。

ta4j

dependencyManagementpom.xml作为其父级。它包含了释放ta4j-parent工件所需的内容,这是我的库中唯一有用的(它是库本身的唯一源模块)模块。

ta4j-实例

此工件包含独立的主类,其中显示了ta4j的使用示例。我不想发布它。

现在这个ta4j只包含示例的依赖关系。

版本

由于我只想发布pom.xml模块,我转到ta4j子目录并运行以下命令:

./ta4j/ta4j

...返回:

mvn release:prepare -Darguments=-Dgpg.passphrase="<my key secret>"

发布插件不想发布[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building ta4j [INFO] task-segment: [release:prepare] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] [release:prepare {execution: default-cli}] [INFO] Verifying that there are no local modifications... [INFO] ignoring changes on: **/pom.xml.backup, **/release.properties, **/pom.xml.branch, **/pom.xml.next, **/pom.xml.releaseBackup, **/pom.xml.tag [INFO] Executing: /bin/sh -c cd /home/user/workspace/ta4j/ta4j && git status [INFO] Working directory: /home/user/workspace/ta4j/ta4j [INFO] Checking dependencies and plugins for snapshots ... There are still some remaining snapshot dependencies. : Do you want to resolve them now? (yes/no) no: : no [INFO] ------------------------------------------------------------------------ [ERROR] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Can't release project due to non released dependencies : eu.verdelhan:ta4j-parent:pom:0.4-SNAPSHOT in project 'ta4j' (eu.verdelhan:ta4j:jar:0.4-SNAPSHOT) [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7 seconds [INFO] Finished at: Thu May 22 21:50:50 CEST 2014 [INFO] Final Memory: 23M/293M [INFO] ------------------------------------------------------------------------ 模块。它认为我应该首先发布快照依赖:ta4j。但是,正如我之前所说,我不希望父母被释放(...因为它对每个人都没用)。

那么我怎样才能发布ta4j-parent模块而只发布ta4j模块?

注意:我使用的Maven版本是Apache Maven 2.2.1(Java 1.7)。

感谢。

编辑2014-06-02

我编辑了这个问题,因为我认为我的主要问题是在不释放其父模块的情况下释放子模块。是否快照没有区别。

2 个答案:

答案 0 :(得分:3)

经过几天的研究,我没有找到让父POM透明的方法。

我最终还是选择了发布父模块。即使它(理论上)无用,我也注意到这种项目是一种常见的做法。

我很失望,似乎没有这样的功能(比如在POM中包含父POM)和Maven。但如果有人能在未来找到办法,我会改变已接受的答案。

答案 1 :(得分:1)

这听起来有点奇怪,因为如果有人在maven中引用ta4j,那么maven就会抱怨找不到ta4j-parent,除非你也提供了ta4j-parent。如果您要使父级可用,那么最好给它一个发布版本而不是快照版本。

也就是说,您可以通过设置ignoreSnapshots属性来告诉maven忽略快照,即

mvn release:prepare -DignoreSnapshots=true -Darguments=-Dgpg.passphrase="<my key secret>"