我有一个maven项目
- 父级项目(带有以下模块)(软件包类型POM)
- API项目(包装类型JAR)
- 包装项目(对API项目有一个依赖性)(软件包类型自定义)
我希望能够将API项目部署到Nexus存储库,以便其他人可以利用该代码。包装项目更多是用于较小的部署用例集合的支持实用项目。父母项目为我全部包裹。
当我将API项目部署到Nexus Repo时,它会很好地部署。如果我尝试制作一个对API具有脱颖而出的全新项目,它会发现Nexus的API依赖性,但也希望同时使用父级项目。是否有任何方法可以通过Nexus Repo使用?
关于如何组织我的小型Proj支持这一点的任何提示?
当您将<parent>
引用到Maven项目时,您在做什么是在说:/p>
因此,为了使Maven构建项目的模型,Maven有必要检索父母本身。换句话说,添加<parent>
标签会在父母和孩子之间产生明确的硬依赖性。
好消息是,继承不必遵循汇总。那是什么意思?
聚合是当您在POM中列出<modules>
时。它告诉Maven,反应堆(即Maven构建的项目集)也应包括以下(SUB)项目。
继承是设置项目的<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 Project层次结构中的信息,并提供独立的POM,我在Maven Central中发布文物,而没有任何额外的链接