Maven 将一个项目的依赖项继承到另一个项目中
Posted
技术标签:
【中文标题】Maven 将一个项目的依赖项继承到另一个项目中【英文标题】:Maven inherit dependencies from a project into another 【发布时间】:2013-08-01 19:50:14 【问题描述】:给定一个 Maven 项目 A 生成一个 jar:
<groupId>myprojects</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>some.needed.group</groupId>
<artifactId>some.needed.artifact1</artifactId>
</dependency>
<dependency>
<groupId>some.needed.group</groupId>
<artifactId>some.needed.artifact2</artifactId>
</dependency>
</dependencies>
项目 B 依赖于 A 并生成企业档案:
<groupId>myprojects</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<packaging>ear</packaging>
<dependencies>
<dependency>
<artifactId>A</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
我怎样才能让项目 B 的耳朵工件不仅包括项目 B 的 jar 工件,而且还包括其依赖的工件 some.needed.artifact1 和 some.needed.artifact2?
我编辑并添加了这个,因为似乎只有在从 Bamboo 运行 mvn 时才会出现该行为: 奇怪的是,当我从 Eclipse 本地运行 mvn 时它正在工作,但当它由 Bamboo 持续集成服务器运行时却没有。在本地运行中,我正确生成了 application.xml,其中包含对所有传递依赖项的引用,相应的 jar 文件复制到 lib 文件夹。在 Bamboo 计划中,生成的 application.xml 不包含引用,并且 jar 文件不在 lib 文件夹中。
【问题讨论】:
已经应该了;依赖是传递的。 【参考方案1】:首先作为一个修正,我认为依赖应该是 A,而不是 B,像这样:
<dependencies>
<dependency>
<artifactId>A</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
关于拥有依赖 jar 的原始问题,我认为它们应该在您的 EAR 文件中可用,因为您依赖于 A project
,而这又依赖于 some.needed.artifact1 and some.needed.artifact2
(传递依赖)作为您的范围provided 是默认值,因此 maven 会将其作为编译器,并且所有 jar 文件都会捆绑在您的 ear 文件中。
谢谢
【讨论】:
确实,我打错了 artifactId。我已经在我的文本中重新编辑并更正了它。 奇怪的是,当我从 Eclipse 本地运行 mvn 时它正在工作,但当它由 Bamboo 持续集成服务器运行时却没有。在本地运行中,我使用对所有传递依赖项的引用正确生成了 application.xml,并将它们复制到 lib 文件夹中。在 Bamboo 计划中,生成的 application.xml 不包含引用,并且这些不在 lib 文件夹中。我会继续搜索。 嗯,对不起,Bamboo 不属于我的保护伞:(。您可以在 Bamboo 下标记您的问题,以便其他 Bamboo 专家可以帮助您。谢谢【参考方案2】:在产生耳朵的项目 B 中,您可以像这样包含对 A 的依赖项
<modules>
<module>project A</module>
</modules>
<dependencies>
<dependency>
<groupId>some.needed.group</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
在项目A中,将父项目定义为项目B,如下所示
<parent>
<groupId>myprojects</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<name>project B</name>
</parent>
<name>project A</name>
【讨论】:
只有打包'pom'的项目才能定义模块;项目 A 不能包含此类引用,因为它的包装是“耳朵”。 我猜你没有正确阅读我的答案。我的回答中没有任何地方说项目 A 包装了耳朵,因为您自己表示项目 B 包装了耳朵。我上面说过在项目A pom中定义项目B为项目A的父项目,并将项目A作为一个模块包含在项目B pom中,这样在构建项目B时可以直接打包项目A的jar文件 在我之前的回答中,我的意思是项目“B”。除了 reactor(pom 打包)之外,没有其他项目可以定义模块。 这正是我所说的,项目 B 是你的反应堆,你在哪里为项目 A 定义模块对吗?以上是关于Maven 将一个项目的依赖项继承到另一个项目中的主要内容,如果未能解决你的问题,请参考以下文章
如何将本地项目(不是 jar)作为依赖项添加到 Maven 项目