我们有一个Maven多模块项目,其中有大约30个子项目/模块。
使用这两个依赖项的所有子项目。(这只是为了在示例中放一些具体的东西)
xml prettyprint-override"><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra-reactive</artifactId>
</dependency>
因此,我们重构并将这两个依赖项放入父POM。上面的片段现在在父级别。所有子项目仍然可以从中受益,并且只需要在一个地方维护版本,所有人都很高兴。
我们现在有一个适合业务用例的第31个项目,适合这个多模块项目,我们相信把它放在同一个父POM下是有意义的。
然而,第31个项目不需要来自父POM的特定依赖项。(在本例中是Cassandra依赖项,但问题是如何从父项中排除某些内容)
第31个项目是这个多模块的一部分,他还从父模块中获取了这个依赖项(Cassandra)。如何告诉此子项目从父项目中排除此依赖项?
> < li>
我不想完全提取此项目并将其从多模块中分离出来。
我尝试在所有依赖项中放置排除项,但它仍然存在。就像我的孩子pom的所有依赖项一样,我写这个:
<dependency>
<groupId>some.group</groupId>
<artifactId>some.artifact</artifactId>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra-reactive</artifactId>
</exclusion>
</exclusions>
</dependency>
我甚至尝试进行疯狂的重构,将依赖项从父级移回所有子级,并对子级进行了30次复制粘贴,而我的第31个项目没有它。这是有效的,但我相信还有比这更聪明的东西。
如何从父POM中排除一个特定的依赖关系?
我通常的做法是使用多层次的POM。
这意味着,不是一个下面只有一排非父球的单个父球,而是一整棵父球,由一个根父球组成,它有几个级别的中间父球作为它的子球,以非父球作为树的叶子结束。
通过添加中间父POM,您可以让根父只提供所有子POM真正使用的依赖关系,而中间POM可以提供附加的依赖关系,这些依赖关系只由它们的子POM使用,而不由它们的兄弟POM的子POM使用。
因此,在你的情况下,你的根父pom将声明除卡桑德拉之外的所有依赖项,并且它将有两个子级:你的无卡桑德拉项目和你现有的父pom,它现在将成为中间父pom,它只会声明卡桑德拉依赖性。因此,中间父 pom 的子级将从根继承除卡桑德拉之外的所有依赖项,然后从中间父 pom 继承卡桑德拉。
我试过这个,效果很好。
诚然,理论上可能存在无法覆盖的情况,因为父pom只能形成一棵树,而树不是图,但在实践中,我从未遇到过这样一种情况,即我想以这种机制无法覆盖的方式安排我的依赖关系。
举个例子,看看我的公共家庭项目,为了更容易管理它们,我把它们全部整合到一个存储库中:
https://github.com/mikenakis/Public
https://github.com/mikenakis/Public/blob/master/pom.xml 是根pom。
https://github.com/mikenakis/Public/blob/master/testana/pom.xml 是中间母体,
https://github.com/mikenakis/Public/blob/master/testana/testana-console/pom.xml是一片树叶。
现在,在我的项目中,碰巧我只在叶pom中声明依赖关系,因为我的项目并不真正依赖于许多外部库。但是我可以在根pom和中间父pom中声明依赖关系,如果我愿意的话,他们的孩子会继承他们。
Maven插件及其在父pom中定义的依赖项,我不希望我的子pom包含该插件依赖项。 例如,如果有1个父级和100个子级,99个使用该插件并希望在一个子级中排除该插件。 我们如何才能实现这一目标?
在我的父pom xml文件中,我声明了一些在大多数孩子的pom中使用的依赖项。 然而,在一个子pom中,我不使用这些依赖项,我想找到一种方法来排除它们(为了不被视为未使用的依赖项)。 现在,在子pom的依赖部分,我什么都没有!有什么想法吗?
我有一个带有子pom B、C和D的父pom A,在B、C和D中,我有相同类型的依赖项。 ie父Pom 儿童Pom 到目前为止,我已经尝试过编辑插件surefire,当试图排除子pom的测试范围时,它不起作用。 我的问题是,是否有一种方法可以将概要文件添加到父pom中,以排除所有子pom的类型测试jar的所有依赖项。谢谢
我正在使用STS 2.9.1(构建在Eclipse 3.7.2上)和与STS(V1.0.200.20111228-1245)绑定的m2e插件。 我有一个问题是包含多个模块的Eclipse项目中缺少依赖项,或者我不完全理解它应该如何工作。 这是一个maven项目。 在我的项目>Properties>Java Build Path>Libraries中,我有“maven dependencies”库,
我有一个关于Maven依赖解析机制如何在多模块项目中工作的问题。 通常,我只在构建多模块项目时使用“mvn clean install”,我的假设是,如果项目中的任何模块需要以前的模块,依赖关系将通过访问本地存储库并加载相应的“jar”来解决。 由于项目内部原因,我必须使用“mvn清洁编译”,这个命令自然不会创建任何“jar”,而“install”不存在。所以在这里我开始想知道,多模块项目的依赖项
我有一个多模块maven项目,包含三个模块、和 Core具有以下依赖项定义 我已经为所有三个模块添加了Java9定义,的如下所示: 但是,我不知道如何让的测试类能够在测试执行期间看到类。当尝试测试运行时,找不到类。 如果向的添加需要My.Project.TestUtils;的: 然后在编译时,我得到一个错误,即找不到模块(大概是因为它只是作为测试依赖项引入的)。 在Java9模块化的世界中,如何处