我有一个Maven项目
我希望能够将API项目部署到Nexus存储库,以便其他人可以利用该代码。包装项目更多地是一个支持实用程序项目,适用于较小的部署用例集。父项目将所有内容都包装在一起。
当我将API项目部署到联系仓库时,它可以很好地部署。如果我尝试创建一个依赖于API的全新项目,它会在关联中找到API依赖关系,但同时也希望有Parent项目。有没有办法解决发布父项目的问题,因为通过联系回购使用父库时,使用API库确实不是必需的?
关于如何组织Maven项目以支持此的任何提示?
当您添加<parent>
对Maven项目的引用时,您正在说的是:“从该父项获取所有配置并将其注入到我的模型中,然后使用以下内容覆盖”
因此,为了使Maven构建项目模型,Maven必须检索父项本身。换句话说,添加<parent>
标签会在父级和子级之间创建明确的硬依赖性。
好消息是,继承不必遵循聚合。这到底是什么意思?
聚合是指您<modules>
在pom中列出。它告诉Maven,反应堆(即Maven构建的项目集)还应包括以下(子)项目。
继承是在设置项目的时<parent>
。
Maven <parent>
在<modules>
任何地方都没有强制项目<modules>
必须将其子项列出为,Maven 在任何地方都没有强制项目必须将项目列出为<parent>
。
有些人会像这样建立他们的项目
ROOT/
+- pom.xml
+- parent/
| \- pom.xml
+- api/
| \- pom.xml
\- packaging/
\- pom.xml
Run Code Online (Sandbox Code Playgroud)
的父项ROOT
,api
以及packaging
实际上是一个孩子ROOT
。有时ROOT
是没有父母的独立项目[实际上,我自己经常使用这种模式。当我处理多个相关项目时,我将pom.xml
在我的本地磁盘上汇总一个聚集并使用IDE打开它,这样所有相关代码都可以作为一个“项目”使用,即使实际的模块可能来自不同的来源]
因此,在您的情况下,解决方案是<parent>
从“ API”模块中删除标签。
现在!有一个缺点。当您<parent>
从“ API”模块中删除标签时,您已删除了父项目提供的所有默认设置,因此您需要复制与“ API”项目相关的那些默认设置,否则可能会发现行为上的细微变化。例如,您应该确切地复制固定的插件版本以及<dependencyManagement>
与“ API”依赖项有关的任何版本。您可能还需要复制其他位,但是mvn help:effective-pom
在删除<parent>
标签前后,您应该使用Maven命令,以帮助查看有效区别。