我有一个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命令,以帮助查看有效区别。
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |