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

如何在IntelliJ IDEA中解决Java文件的依赖冲突?,java,intellij-idea,dependency-management,maven-dependency,conflicting-libraries,Java,Intellij Idea,Dependency Management,Maven Dependency,Conflicting Libraries,我曾试图在网上搜索我所面临的问题,但也许我没有向谷歌提出正确的问题,所以我来了 我正在使用IntelliJ IDEA进行我的多模块项目。对于我的一个模块,其中一个类文件正在使用静态导入- import static javax.ws.rs.core.Response.Status.Family.familyOf; 作为一个大项目,有很多从内部repo下载的依赖项,但出于某种原因IntelliJ拒绝使用依赖项“javax.ws.rs-api-2.0”,而是使用“jersey-core-1.8”。

我曾试图在网上搜索我所面临的问题,但也许我没有向谷歌提出正确的问题,所以我来了

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

import static javax.ws.rs.core.Response.Status.Family.familyOf;
作为一个大项目,有很多从内部repo下载的依赖项,但出于某种原因IntelliJ拒绝使用依赖项“javax.ws.rs-api-2.0”,而是使用“jersey-core-1.8”。因此,它抛出了一个编译错误,称为找不到符号“familyof”

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


PS-此问题在Eclipse IDE中不会出现。

我可以通过以下步骤解决此问题-

  • 转到“打开模块设置”命令+向下箭头键
  • 选择依赖项选项卡
  • 在列表中搜索上述两个依赖项
  • 将“javax.ws.rs-api-2.0”依赖项向上移动,以确保此依赖项高于“jersey-core-1.8”依赖项

  • 我不认为这是一个永久性的解决方案,但它似乎起了作用。如果对Java/Mave/IntelliJ有深入了解的人能回答这个问题,那就太好了

    通过在pom.xml中遍历依赖项,每次使用Maven都可以得到正确的结果,并确保在依赖项列表中首先声明要优先的依赖项。是的,在pom.xml中声明依赖项的顺序很重要


    然后,如果所有人都在使用相同的Maven版本,那么结果应该是一致的。

    Maven如何在同一依赖项的两个版本之间进行选择?

    如前所述,Maven选择first met依赖项,这就是为什么在pom中更改依赖项的顺序时它会起作用

    如何查找Maven依赖项冲突?

    在终端中的pom文件夹中:

    mvn依赖关系:树-Dverbose | grep“冲突”

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

    使用EclipseIDE,单击pom和
    依赖层次结构
    选项卡。然后,用依赖项填充过滤器字段。在左侧,您将看到冲突(如使用
    mvn dependendy:tree
    ,以及筛选结果),在右侧,您将看到所选的依赖项

    有了IntelliJ,我可以帮助你。有一个图表视图来查找冲突

    如何解决Maven依赖项冲突?

  • 在pom中添加
    dependencyManagement
    标记,告诉Maven您想要哪个依赖项
  • 例如:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.7</version>
            </dependency>
        <dependencies>
    </dependencyManagement>
    
    
    org.apache.commons
    . 使用其他IDE可能是可行的

    IntelliJ IDEA允许您将Maven依赖项添加到项目中。我们建议您在POM中指定依赖项。您在IntelliJ IDEA模块设置中手动设置的依赖项将在下次Maven项目导入时丢弃


  • 请阅读以轻松配置项目依赖项。

    您和您的队友应该使用maven和POM。在这种情况下,您的依赖关系将自动为您管理,并且不会出现这种情况。如果您使用ide来管理依赖项,那么必须使用gui删除javax.ws.rs-api依赖项,并在jersey-core上添加依赖项。我们使用maven和POM。代码库托管在公司内部的github repo上,所以我想知道为什么它对其他人有效而对我无效。我打赌我错过了一些我无法理解的intelliJ设置。如果有人在使用Eclipse,但他们没有看到这个问题,为什么在我使用IntelliJ时会出现这种情况?它对我来说很有效,只需要更改依赖项,我想在pom文件中占据更高的位置。感谢lotit不能以这种方式工作,您需要更改pom文件中的依赖项。将您想要的库放在更高的位置。那工作
        <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>