如何在IntelliJ IDEA中解决Java文件的依赖冲突?

时间:2016-07-22 15:54:15

标签: intellij-idea dependency-management conflicting-libraries maven-dependency

我试图在网上搜索我遇到的问题,但也许我不是在问谷歌正确的问题所以我在这里。

我在我的多模块项目中使用IntelliJ IDEA。对于我的一个模块,其中一个类文件使用静态导入 -

import static javax.ws.rs.core.Response.Status.Family.familyOf;

作为一个大项目,有很多从内部仓库下载的依赖项,但由于某些原因IntelliJ拒绝使用依赖项" javax.ws.rs-api-2.0"相反,它正在使用" jersey-core-1.8"。因此,它会抛出一个编译错误,说找不到符号" familyof"。

我从两个依赖项中查看了Response.java,发现jersey依赖没有familyof方法,而javax.ws.rs-api-2.0有它,但IntelliJ不使用这个依赖。我该如何解决这个问题。我团队中的大多数开发人员都使用Eclipse,他们没有这个问题。我试图习惯IntelliJ IDE,但似乎无法找到解决方法。在这方面的任何帮助非常感谢。

PS - Eclipse IDE中不会发生此问题。

3 个答案:

答案 0 :(得分:2)

我可以按照以下步骤解决此问题 -

  1. 转到“打开模块设置”命令+向下箭头键
  2. 选择“依赖关系”选项卡
  3. 在列表
  4. 中搜索上述两个依赖项
  5. 移动“javax.ws.rs-api-2.0”依赖关系以确保此依赖关系高于“jersey-core-1.8”依赖关系。
  6. 我不认为这是一个永久的解决方案,但似乎有效。如果对Java / Mave / IntelliJ有深入了解的人有这个问题的答案会很棒!

答案 1 :(得分:0)

每次使用Maven时,您都可以通过对pom.xml中的依赖项进行混洗来获得正确的结果,并确保在依赖项列表中首先声明要优先使用的依赖项。是的,在pom.xml中声明依赖项的顺序很重要!

然后,如果你们所有人都使用相同的Maven版本,你应该得到一致的结果。

答案 2 :(得分:0)

Maven如何在具有相同依赖关系的两个版本之间进行选择?

here所述,Maven选择第一个遇到的依赖项,这就是为什么当您更改pom中的依赖项顺序时它会起作用的原因。

如何查找Maven依赖项冲突?

在终端的pom文件夹中:

mvn dependency:tree -Dverbose | grep "conflict"

将为您提供项目中所有冲突的依赖项。

使用Eclipse IDE,单击pom并单击Dependency hierarchy选项卡。然后,用依赖项填充“过滤器”字段。在左侧,您将看到冲突(例如与mvn dependendy:tree,具有过滤结果),在右侧,您将看到选择的依赖项。

有了IntelliJ,the documentation of IntelliJ可以为您提供帮助。有一个图视图可以查找冲突。

如何解决Maven依赖项冲突?

  1. 在pom中添加dependencyManagement标记以告诉Maven您想要哪个依赖项

示例:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.7</version>
        </dependency>
    <dependencies>
</dependencyManagement>
  1. 更改pom中依赖项的顺序
  2. 添加排除项

示例:

    <dependency>
        <groupId>com.my.groupid</groupId>
        <artifactId>my-artifact-id</artifactId>
        <version>1.2.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

为什么IntelliJ和Eclipse之间有区别?

请阅读the documentation of IntelliJ,以轻松配置项目依赖项。