我有一个maven项目
- 父项目(包含以下模块)(包类型 pom)
- API项目(jar包类型)
- 打包项目(依赖API项目)(包类型自定义)
我希望能够将 API 项目部署到 Nexus 存储库,以便其他人可以利用该代码。打包项目更像是一个支持实用程序的项目,用于较小的部署用例集。父项目为我将所有内容打包在一起。
当我将 API 项目部署到 nexus 存储库时,它部署得很好。如果我尝试创建一个依赖于 API 的全新项目,它会在 nexus 中找到 API 依赖性,但随后也需要父项目。有什么办法可以解决发布父项目的问题,因为当通过 nexus 存储库使用 API 库时,它真的不是必需的?
关于如何组织我的 maven proj 来支持这个的任何提示?
最佳答案
当你添加 <parent>
引用 Maven 项目你正在做的是说:“从那个父项目中获取所有配置并将其注入(inject)我的模型,然后用以下内容覆盖”
因此,为了让 Maven 构建您项目的模型,Maven 有必要自己检索父对象。换句话说,添加一个 <parent>
标记在父项和子项之间创建了明确的硬依赖关系。
好消息是继承不必遵循聚合。这到底是什么意思?
聚合是当你列出<modules>
在你的 pom 中。它告诉 Maven react 器(即 Maven 构建的项目集)还应该包括以下(子)项目。
继承是指您设置项目的 <parent>
.
Maven 没有强制执行项目的 <parent>
必须将其子项列为 <modules>
Maven 无处强制执行项目 <modules>
必须将项目列为 <parent>
.
有些人会这样设置他们的项目
ROOT/
+- pom.xml
+- parent/
| \- pom.xml
+- api/
| \- pom.xml
\- packaging/
\- pom.xml
ROOT
的父级在哪里, api
和 packaging
实际上是 ROOT
的 child .或者有时 ROOT
将是一个没有父项的独立项目[事实上,这是我自己经常使用的模式。当我从事几个相关项目时,我会汇总一个 pom.xml
在我的本地磁盘上并使用我的 IDE 打开它,这样所有相关代码都可以作为一个“项目”使用,即使实际模块可能来自不同来源]
因此在您的情况下,解决方案是删除 <parent>
来自“API”模块的标签。
现在!有一个缺点。当您删除 <parent>
从“API”模块中删除标签,您已经删除了父项目提供的所有默认值,因此您需要复制与“API”项目相关的那些默认值,否则您可能会发现行为发生细微变化。例如,您应该明确复制插件版本的固定,以及任何 <dependencyManagement>
这与“API”依赖关系有关。您可能需要复制其他位,但您应该使用 Maven 命令 mvn help:effective-pom
删除 <parent>
之前和之后标记以帮助查看有效差异
关于java - 如何删除依赖项 : maven sub-modules creates implicit dependency on parent module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999000/