Java 如何在不释放父POM的情况下释放Maven子模块?
我是一个Java库(,它为提供函数)的维护者。在我的存储库中,不同的模块被mavenized,我正试图发布其中一个模块 马文建筑 本项目的Maven架构为:Java 如何在不释放父POM的情况下释放Maven子模块?,java,maven,release,snapshot,maven-release-plugin,Java,Maven,Release,Snapshot,Maven Release Plugin,我是一个Java库(,它为提供函数)的维护者。在我的存储库中,不同的模块被mavenized,我正试图发布其中一个模块 马文建筑 本项目的Maven架构为: ta4j-parent |__ ta4j |__ ta4j-examples 泰姬陵母酒店 我添加这个pom.xml只是为了在ta4j和ta4j示例之间共享一些属性(licenses,issueManagement,等等),以及为了将来的dependencyManagement。我不想发布这个工件(因为它对我的库的用户毫无用处)
ta4j-parent
|__ ta4j
|__ ta4j-examples
泰姬陵母酒店
我添加这个pom.xml
只是为了在ta4j
和ta4j示例之间共享一些属性(licenses
,issueManagement
,等等),以及为了将来的dependencyManagement
。我不想发布这个工件(因为它对我的库的用户毫无用处)
泰姬陵
此pom.xml
将ta4j父项
作为其父项。它包含释放ta4j
工件所需的内容,这是我的库唯一有用的(它是库本身的唯一源模块)模块
泰姬陵实例
此工件包含独立的主类,这些类显示了ta4j的使用示例。我不想发布它
现在,这个pom.xml
只包含示例的依赖项
释放
由于我只想释放ta4j
模块,我转到/ta4j/ta4j
子目录并运行以下命令:
mvn release:prepare -Darguments=-Dgpg.passphrase="<my key secret>"
发布插件不想发布ta4j
模块。它认为我应该首先释放快照依赖项:ta4j parent
。但是,正如我之前所说,我不希望父母被释放(……因为这对每个人都没用)
那么,我如何才能释放ta4j
模块,而只释放ta4j
模块呢
注意:我使用的Maven版本是ApacheMaven2.2.1(Java1.7)
谢谢
编辑2014-06-02
我编辑了这个问题,因为我认为我的主要问题是在不释放父模块的情况下释放子模块。无论是否使用快照都没有区别。这听起来有点奇怪,因为如果有人在maven中引用了泰姬陵,那么maven会抱怨找不到泰姬陵家长,除非你也提供了。如果要使父级可用,那么最好给它一个发布版本,而不是快照版本
也就是说,您可以通过设置ignoreSnapshots
属性告诉maven忽略快照,即
mvn release:prepare -DignoreSnapshots=true -Darguments=-Dgpg.passphrase="<my key secret>"
mvn发布:prepare-DignoreSnapshots=true-Darguments=-Dgpg.passphrase=“”
经过几天的研究,我没有找到使父POM透明的方法
我最终选择了同时发布父模块。即使它(理论上)毫无用处,我也注意到这是此类项目的常见做法
我很失望Maven似乎没有这样的特性(比如在子POM中包含父POM)。但是,如果将来有人能找到一种方法,我会改变被接受的答案。你为什么使用而不是Maven 3?请尽快更新。第二,你的项目结构看起来是错误的,因为你有一个不包含重要内容的父模块,比如固定插件版本等。你有包含这些内容的子模块。此外,您正在使用非常旧的插件版本(maven gpg plugin 1.1?)等等@khmarbaise,因为maven 2默认由Ubuntu12.04 LTS提供(这是我现在使用的系统)。你认为使用Maven 3可以解决我的问题吗?我将看一看插件版本。无论如何,我的目标不是立即更新,而是发布一个版本。最后,我认为,如果子模块共享插件,那么将插件版本固定在父pom中的兴趣就是专利,这里不是这样(maven编译器插件除外,但我将其放在父pom中)。谢谢。插件版本的固定是使您的构建在不同Maven版本上可复制的一件基本事情。如果Maven 2是由Ubuntu提供的,那么使用一个非常旧的东西对我来说是没有意义的。如果你不使用你的父母分享东西,你创造的结构就越来越没有意义了。这被认为是非常糟糕的做法™. 依赖于快照的东西不应该被视为生产就绪。@Markus是的,我同意,我很惊讶发布插件竟然有这个选项。谢谢你的回答。事实上,按照你的说法,这听起来很奇怪。我不知道Maven会抱怨找不到泰姬陵的家长。显然这不是我要找的。我同意@Markus,因为这是一种不好的做法。但我不想让泰姬陵依赖于任何快照。我更多考虑的是Maven选项,使用有效的pom而不是真实的pom(例如),并使父工件透明。仍在调查中,但谢谢你们两位。:)从ta4j的pom.xml中删除“parent”标记怎么样
mvn release:prepare -DignoreSnapshots=true -Darguments=-Dgpg.passphrase="<my key secret>"