IntelliJ IDEA:如何使用pom.xml同步项目库和依赖项?

5
当我在我的项目的pom.xml文件中更改一个依赖版本时(该项目有多个模块),我会在“项目结构”的“库”部分看到新版本和旧版本。
例如,最近我将Drools从版本5.4更改为5.5。当我进入“库”部分时,我看到了两个库,所以我手动删除了5.4。
我该如何告诉IDEA删除在pom.xml文件中未被引用的库?
谢谢
2个回答

7

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

同步设置可以通过 设置 > Maven > 导入 > 自动导入Maven项目 进行设置。

但我认为这是其他问题。这是由于使用了不同版本Drools的其他依赖项引起的。您必须明确地从该依赖项中排除旧版Drools版本。

如何找到引起此问题的依赖项?

打开您的依赖树。可以通过在maven模块上单击 右键 并单击 显示依赖项 或按Ctrl + Alt + Shift + U 来完成。

将会有一些红线指向同一Maven构件的不同版本。只需单击它,Idea将引导您发现不一致之处。然后,只需右键单击具有错误版本的maven构件并单击 排除 或Shift + delete。

检查您的 pom.xml。您应该能够找到像这样的行:

<exclusions>
   <exclusion>
      <artifactId>drools</artifactId>
      <groupId>drools</groupId>
      <version>5.4</version>
    </exclusion>
</exclusions>

我看不到“显示依赖项”的选项,除了“Maven Integration”插件外,我需要启用其他插件吗?v12.1.6 - vikingsteve
1
不需要插件。在“Maven项目”子窗口的右侧面板上右键单击它。 - Milan Baran
"自动导入Maven项目"选项在IntelliJ 2022中不存在。 - themagicalyang

1
非常感谢你,米兰。
在我的情况下,问题似乎是IntelliJ的一个bug(或特性!),但是你的回答真的很有帮助,所以我会将其标记为已接受。看起来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)。然后,Libraries中的5.4.0.Final消失了,并且C2的依赖树反映了正确的Drools版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接