我试图在网上搜索我遇到的问题,但也许我不是在问谷歌正确的问题所以我在这里。
我在我的多模块项目中使用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中不会发生此问题。
答案 0 :(得分:2)
我可以按照以下步骤解决此问题 -
我不认为这是一个永久的解决方案,但似乎有效。如果对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依赖项冲突?
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之间有区别?
您可以向模块添加依赖项,而无需按照the documentation of IntelliJ中的说明将其添加到pom中。使用其他IDE可能是可能的。
IntelliJ IDEA使您可以向项目添加Maven依赖项。我们建议您在POM中指定依赖性。您在IntelliJ IDEA模块设置中手动设置的依赖项将在下一次Maven项目导入时被丢弃。
The Maven plugin in Eclipse (M2Eclipse) may load dependencies differently compared to mvn
请阅读the documentation of IntelliJ,以轻松配置项目依赖项。