当我在项目的 pom.xml 之一(它有几个模块)中更改依赖项版本时,我会在项目结构的库部分中看到新版本和旧版本。
例如,最近我将 Drools 从 5.4 版本更改为 5.5。当我进入库部分时,我看到了这两个库,所以我手动删除了 5.4。
如何告诉 IDEA 删除 pom.xml 文件中未引用的库?
谢谢
当我在项目的 pom.xml 之一(它有几个模块)中更改依赖项版本时,我会在项目结构的库部分中看到新版本和旧版本。
例如,最近我将 Drools 从 5.4 版本更改为 5.5。当我进入库部分时,我看到了这两个库,所以我手动删除了 5.4。
如何告诉 IDEA 删除 pom.xml 文件中未引用的库?
谢谢
好吧,这不是同步项目库的问题。
同步设置可以通过Settings > Maven > Importing > Import maven project automatically
但我认为这是另一个问题。它是由使用不同 Drools 版本的其他依赖引起的。您必须明确地从该依赖项中排除旧的 Drools 版本。
如何找到导致依赖的这个问题?
打开你的依赖树。它可以通过right click
在您的 maven 模块上完成,然后单击Show dependencies
或按 Ctrl + Alt + Shift + U。
会有一些红线导致同一 maven 工件的不同版本。只需单击它,Idea 就会引导您到哪里发生不一致。然后只需右键单击版本错误的 Maven 工件,然后单击Exlude
或 Shift + 删除。
检查您的pom.xml
. 你应该找到这样的行:
<exclusions>
<exclusion>
<artifactId>drools</artifactId>
<groupId>drools</groupId>
<version>5.4</version>
</exclusion>
</exclusions>
非常感谢你,米兰。
就我而言,问题似乎是 IntelliJ 错误(或功能!),但您的回答非常有帮助,因此我将其标记为已接受。IntelliJ 似乎没有更新孙辈的依赖版本。
我会解释会发生什么。
我有一个父 POM (P) 和两个子 POM (C1 和 C2)。
父 P 定义了一些属性,包括:
<drools.version>5.4.0.Final</drools.version>
Child C1 依赖于 Drools 版本,使用:
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools.version}</version>
</dependency>
C2 依赖于 C1,因此它间接依赖于 Drools 版本。
如果我将父 POM 中的版本更改为 5.5.0.Final 并导入(该 POM 的)更改,则“项目结构”窗口的“库”部分包括两个版本:5.4.0.Final 和 5.5.0.Final。
原因是 C2 仍然认为它依赖于旧版本。C1 的依赖树显示了 Drools 的正确版本 5.5.0.Final。但是,C2 的依赖关系树显示了对 C1 的依赖关系(右),而 C1 又依赖于旧的 5.4.0.Final 版本(错误)。
为了解决这个问题,我重新导入了 C1 的 POM(或者我猜的所有 POM)。然后 5.4.0.Final 从库中消失了,C2 的依赖关系树反映了正确的 Drools 版本。