5

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

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

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

谢谢

4

2 回答 2

7

好吧,这不是同步项目库的问题。

同步设置可以通过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>
于 2013-10-18T08:56:03.280 回答
1

非常感谢你,米兰。

就我而言,问题似乎是 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 版本。

于 2013-10-18T11:26:46.520 回答