我有一个maven项目
我希望能够将API项目部署到Nexus存储库,以便其他人可以利用该代码。对于较小的部署用例集,Packaging Project更像是一个支持实用程序项目。父项目将我们整理在一起。
当我将API项目部署到nexus repo时,它部署得很好。如果我尝试创建一个对API有依赖性的全新项目,它会在nexus中找到API依赖项,但是也需要父项目。有什么方法可以绕过发布父项目,因为当通过nexus repo使用它时,它是否真的不需要使用API库?
有关如何组织我的maven proj以支持此功能的任何提示?
答案 0 :(得分:3)
当您向Maven项目添加<parent>
引用时,您正在做的是:“从该父项获取所有配置并将其注入我的模型,然后使用以下内容覆盖”
因此,为了让Maven构建项目模型,Maven必须检索父项本身。换句话说,添加<parent>
标记会在父级和子级之间创建明确的硬依赖关系。
好消息是继承不必遵循聚合。这究竟意味着什么?
汇总是指在您的pom中列出<modules>
。它告诉Maven反应堆(即Maven建造的项目集)还应包括以下(子)项目。
继承是指您设置项目的<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>
。您可能需要复制其他位,但在删除mvn help:effective-pom
标记之前和之后应使用Maven命令<parent>
以帮助查看有效差异
答案 1 :(得分:0)
我的开发I use uber-pom maven plugin which merges information in maven project hierarchy并提供独立的pom作为结果,我在maven中心发布工件而没有任何额外的父母链接