Java 如何在将Gradle项目导入IntelliJ IDEA时避免重复库

Java 如何在将Gradle项目导入IntelliJ IDEA时避免重复库,java,gradle,intellij-idea,Java,Gradle,Intellij Idea,使用IntelliJ IDEA导入Gradle项目时,生成的类路径包含多个Java库的不同版本 如何避免这种情况 如果Gradle正在这样做,你可能不应该阻止它,除非你完全理解它为什么这样做 之所以需要多个版本,有几个原因,例如,您的构建过程中有需要不同版本库的插件 一个插件可以由供应商开发,另一个由随机团队在某个地方开发,它们有不同的需求。有些时候,甚至你自己的应用程序也可能会要求这样做,比如在构建可能在具有多个类加载器的环境中运行的组件的情况下,OSGi就是一个典型的例子 底线是,如果它不妨

使用IntelliJ IDEA导入Gradle项目时,生成的类路径包含多个Java库的不同版本

如何避免这种情况


如果Gradle正在这样做,你可能不应该阻止它,除非你完全理解它为什么这样做

之所以需要多个版本,有几个原因,例如,您的构建过程中有需要不同版本库的插件

一个插件可以由供应商开发,另一个由随机团队在某个地方开发,它们有不同的需求。有些时候,甚至你自己的应用程序也可能会要求这样做,比如在构建可能在具有多个类加载器的环境中运行的组件的情况下,OSGi就是一个典型的例子

底线是,如果它不妨碍你的工作,就把它们留在那里,因为有些东西要求那个版本。对于应用程序本身,您可以定义依赖项并控制所需的版本


通常情况下,根据lid的作者不同,版本号的微小差异可能意味着API发生了巨大的变化,而多个版本是使各个部分组合在一起的唯一方法。不仅适用于你的应用程序,也适用于你的建筑。这里不提可能累积起来的依赖继承。

不,我的Gradle build正确地解决了依赖冲突,只包括每个库的最新版本。我有点惊讶,IDE没有这样做。嗯,IDE使用gradle。拥有多个版本并不总是冲突,拥有多个版本可能不是错误。您可以通过一个简单的实验来消除IDE。关闭ide后,删除gradle的缓存及其安装在gradle home上的所有LIB。然后使用终端执行所有通常需要在终端中使用gradle运行的任务,然后查看缓存中的lib版本。如果您没有告诉ide使用同一个gradle,那么它很可能使用同一个gradle。我曾经遇到过这种情况,原因是不同的“作用域”(gradle中的配置)引入了同一个库的不同版本,因此intellij最终拥有两个版本的库。解决方案是确保(通过排除和直接依赖的方式)所有配置都使用任何受影响库的相同版本。