[英]How to remove dependency: maven sub-modules creates implicit dependency on parent module
我有一个maven项目
我希望能够将API项目部署到Nexus存储库,以便其他人可以利用该代码。 对于较小的部署用例集,Packaging Project更像是一个支持实用程序项目。 Parent Project为我整理了所有内容。
当我将API项目部署到nexus repo时,它部署得很好。 如果我尝试创建一个对API有依赖性的全新项目,它会在nexus中找到API依赖项,但是也需要父项目。 有什么方法可以绕过发布父项目,因为在通过nexus repo使用API lib时,它真的不是必需的吗?
有关如何组织我的maven proj以支持此功能的任何提示?
当您向Maven项目添加<parent>
引用时,您正在做的是:“从该父项中获取所有配置并将其注入到我的模型中,然后使用以下内容覆盖”
因此,为了让Maven构建项目模型,Maven必须检索父项本身。 换句话说,添加<parent>
标记会在父级和子级之间创建显式的硬依赖关系。
好消息是继承不必遵循聚合 。 这究竟意味着什么?
聚合是指在pom中列出<modules>
的时候。 它告诉Maven反应堆(即Maven构建的项目集)还应包括以下(子)项目。
继承是指设置项目的<parent>
。
Maven强制执行项目的<parent>
必须将其子项列为<modules>
,并且Maven强制执行项目<modules>
必须将项目列为<parent>
。
有些人会这样设置他们的项目
ROOT/
+- pom.xml
+- parent/
| \- pom.xml
+- api/
| \- pom.xml
\- packaging/
\- pom.xml
ROOT
, api
和packaging
的父母实际上是ROOT
的孩子。 或者有时ROOT
将是一个没有父母的独立项目[事实上这是我自己经常使用的模式。 当我正在处理几个相关的项目时,我将在我的本地磁盘上汇总一个聚合的pom.xml
并用我的IDE打开它,这样所有相关的代码都可以作为一个单独的“项目”使用,即使实际的模块可能会来来自不同的来源]
因此,在您的情况下,解决方案是从“API”模块中删除<parent>
标记。
现在! 有一个缺点。 从“API”模块中删除<parent>
标记后,您已删除了父项目提供的所有默认值,因此您需要复制与“API”项目相关的默认值,否则您可能会发现微妙的行为的变化。 例如,您应该肯定地复制插件版本的固定,以及与“API”依赖关系相关的任何<dependencyManagement>
。 您可能需要复制其他位,但是您应该在删除<parent>
标记之前和之后使用Maven命令mvn help:effective-pom
以帮助查看有效差异
对于我的开发我使用uber-pom maven插件合并maven项目层次结构中的信息并提供独立的pom作为结果我在maven中心发布工件而没有任何额外的链接到父母
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.