IntelliJ IDEA:如何在pom.xml中将项目库与依赖项同步?

时间:2013-10-18 07:58:22

标签: maven intellij-idea pom.xml

当我在我的项目的pom.xml之一(有几个模块)中更改依赖项版本时,我会看到新版本以及项目结构的“库”部分中的旧版本。

例如,最近我将Drools从版本5.4更改为5.5。当我进入Libraries部分时,我看到了两个库,所以我手动删除了5.4。

如何告诉IDEA删除pom.xml文件中未引用的库?

谢谢

2 个答案:

答案 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版本。

相关问题