gpt4 book ai didi

java - Maven:添加对父 pom 项目的引用

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:06 29 4
gpt4 key购买 nike

我不确定我是否理解如何正确使用父 pom 项目。我定义了以下父 pom:

<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
<module>../child1</module>
<module>../child2</module>
</modules>

然后子级 pom 引用父级(每个子级都有自己的一组未显示的依赖项):

<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../Parent/pom.xml</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>child1</artifactId>

此设置工作正常并在 eclipse (m2eclipse) 中正确解析。我可以将它们部署到我的本地存储库并最终得到以下结构,这应该是正确的:

--com
--example
--parent
--0.0.1-SNAPSHOT
--parent-0.0.1-SNAPSHOT.pom
--child1
--0.0.1-SNAPSHOT
--child1-0.0.1-SNAPSHOT.jar
--child1-0.0.1-SNAPSHOT.pom
--child2
--0.0.1-SNAPSHOT
--child2-0.0.1-SNAPSHOT.jar
--child2-0.0.1-SNAPSHOT.pom

我的问题是,我现在想在一个不同的项目(不是parent、child1 或child2)中引用parent 项目,从而引入所有父项目 children 。我可以在我的其他项目中添加对它的引用:

<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
</dependency>
</dependencies>

执行此操作时,项目在 eclipse 中没有显示任何错误,但没有 Artifact 被添加到我的类路径中:不是 child1、child2 或它们的任何依赖项。

我一直在想必须有一种方法来拥有一个“主”pom 项目,它本身不是一个 jar,而是只引用其他 jar,然后能够在某处引用那个“主”,但我找不到了解这是如何实现的。

最佳答案

我建议的第一件事是更改您的项目结构。

--com
--example
--parent
--0.0.1-SNAPSHOT
--parent-0.0.1-SNAPSHOT.pom
--child1
--0.0.1-SNAPSHOT
--child1-0.0.1-SNAPSHOT.jar
--child1-0.0.1-SNAPSHOT.pom
--child2
--0.0.1-SNAPSHOT
--child2-0.0.1-SNAPSHOT.jar
--child2-0.0.1-SNAPSHOT.pom

我建议采用以下方式:

  --parent (pom.xml)
+--child1
+--child2

可以将父级 checkin 到版本控制(Git、SVN)中,既可以是主控也可以是主干。除此之外,所有 child 都必须像这样引用 parent :

<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>child1</artifactId>

在你的 parent 中你可以使用这样的东西:

<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
<module>child1</module>
<module>child2</module>
</modules>

此外,您只需添加对项目父项的父项引用即可使用公司 pom:

<parent>
<groupId>com.example</groupId>
<artifactId>master-pom</artifactId>
<version>0.0.1</version>
</parent>

<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
<module>child1</module>
<module>child2</module>
</modules>

在公司 pom 中,您可以(并且应该)固定不同的插件版本,并定义公司默认值和建议的依赖项及其适当的版本。

如果你喜欢公司的 super-pom,你可以简单地创建一个单独的 maven 项目,它只包含 pom 文件,其中包含你的配置,如插件、依赖项等。当然,将它 checkin 版本控制(Git、SVN 等) .与其他项目分开。

如果你想引用一个 jar 文件,换句话说就是你的多模块构建的 Artifact ,你必须使用正确的 groupId、artifactId 和版本。如果你想在其他项目中使用 child1,你需要提供以下内容:

<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>child1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>

重要的是要了解多模块构建的父级不是通常使用的 Artifact ,因为基于打包类型 pom 它并没有真正创建 Artifact (jar 文件).

更新:您可以仅针对具有 scope import 的 dependencyManagement 区域以有限的方式执行此操作但这仅用于在 depdencyManagement 中使用,而不用于依赖项。另一种解决方案可能是创建一个单独的虚拟项目,该项目具有两个子项作为传递依赖项的依赖项。但这并不是真正的美。

所以解决方案就是直接添加您在项目中使用的两个或多个依赖项,仅此而已。

关于java - Maven:添加对父 pom 项目的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19395973/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com