[英]How do I resolve dependency conflict for a Java file in IntelliJ IDEA?
我试图在网上搜索我面临的问题,但也许我没有向谷歌提出正确的问题,所以我在这里。
我在我的多模块项目中使用 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 中不会发生。
我可以按照下面提到的步骤解决这个问题 -
我不认为这是一个永久的解决方案,但它似乎有效。 如果对 Java/Mave/IntelliJ 有深入了解的人能回答这个问题,那就太好了!
通过在 pom.xml 中的依赖项周围进行混洗,您可能每次使用 Maven 都可以获得正确的结果,并确保您希望优先的依赖项在依赖项列表中首先声明。 是的,在 pom.xml 中声明依赖项的顺序很重要!
然后,如果你们都使用相同的 Maven 版本,你应该有一个一致的结果。
Maven 如何在相同依赖项的两个版本之间进行选择?
正如这里所解释的,Maven 选择第一个遇到的依赖项,这就是当您更改 pom 中依赖项的顺序时它起作用的原因。
如何查找Maven依赖项冲突?
在终端中,在 pom 文件夹中:
mvn dependency:tree -Dverbose | grep "conflict"
将为您提供项目中所有冲突的依赖项。
使用 Eclipse IDE,单击 pom 和Dependency hierarchy
选项卡。 然后,使用依赖项填充过滤器字段。 在左侧,您将看到冲突(如mvn dependendy:tree
,带有过滤结果),在右侧,您将看到选择的依赖项。
使用 IntelliJ,IntelliJ 的文档可以帮助您。 有一个图表视图来查找冲突。
如何解决Maven依赖冲突?
dependencyManagement
标签告诉Maven你想要哪个依赖示例:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependencies>
</dependencyManagement>
示例:
<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 之间存在差异?
您可以向模块添加依赖项,而无需将其添加到 pom 中,如IntelliJ 文档中所述。 使用其他 IDE 可能是可能的。
IntelliJ IDEA 允许您向项目添加 Maven 依赖项。 我们建议您在 POM 中指定依赖项。 您在 IntelliJ IDEA 模块设置中手动设置的依赖项将在下一次 Maven 项目导入时丢弃。
请阅读IntelliJ 的文档以轻松配置项目依赖项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.