java - 如何删除依赖项 : maven sub-modules creates implicit dependency on parent module

标签 java maven module

我有一个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 的父级在哪里, apipackaging实际上是 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/

相关文章:

java - Oracle 和 MS SQL Server 之间的桥梁

Java将所有转义字符替换为双转义

Java Selenium 。通过文本查找特定 xpath 的元素

java - mvn 测试未找到 junit 测试

python - 如何在py2exe中包含py2exe找不到的psutil组件?

ruby - 从单独的文件中包含一个 Ruby 类

java - 通讯链路故障(MYSQL SERVER 8 + JAVA)

git - 在使用 Hudson/Jenkins 等 CI 工具时,我如何通过 GitHub(或 GitHub 企业版)成功使用 Maven 发布插件

java - 在 GlassFish 上创建和运行 RESTful Web 服务

module - 当两个子模块都在同一个主模块中时,从另一个子模块访问子模块