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