解决与Maven的库冲突
从kotlin 1.4.30开始,kotlin编译器可嵌入依赖项在其主jar包中包含了“fastutil”库的文件。此问题与pom.xml文件中本地指定的fastutil版本冲突 是否有任何方法可以包含1.4.30 kotlin编译器可嵌入依赖项并忽略/it/unimi/dsi/fastutil文件夹,这样它将只使用我指定的版本 kotlin编译器可嵌入布局的屏幕截图: 项目在这里:解决与Maven的库冲突,maven,kotlin,Maven,Kotlin,从kotlin 1.4.30开始,kotlin编译器可嵌入依赖项在其主jar包中包含了“fastutil”库的文件。此问题与pom.xml文件中本地指定的fastutil版本冲突 是否有任何方法可以包含1.4.30 kotlin编译器可嵌入依赖项并忽略/it/unimi/dsi/fastutil文件夹,这样它将只使用我指定的版本 kotlin编译器可嵌入布局的屏幕截图: 项目在这里: import it.unimi.dsi.fastutil.ints.int2objtopenhashmap//
import it.unimi.dsi.fastutil.ints.int2objtopenhashmap//从kotlin编译器可嵌入库默认导入
趣味主线(args:Array){
// http://fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap.html#%3Cinit%3E(国际)
//^当您没有kotlin编译器可嵌入冲突时,这是可能的
//因为它是从kotlin编译器可嵌入库导入此类的
//而不是fastutil库本身
val map=Int2ObjectOpenHashMap(10)
println(“你好,世界!”)
}
Maven 2.0.9早在2008年就在类路径上引入了依赖项的确定性排序
如果您有两个包含相同类的依赖项,pom中提到的第一个将获胜
您可以使用mvn dependency:buildclasspath
检查类路径
在您的情况下,将fastutil放在kotlin编译器之前
<dependency>
<groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId>
<version>8.2.1</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-compiler-embeddable</artifactId>
<version>1.4.30</version>
</dependency>
it.unimi.dsi
如果您打算将您的应用程序作为uber jar分发,请确保检查您的打包操作。Maven shade插件具有强大的过滤工具
尽管依赖类路径顺序实现起来很快,而且可以正常工作,但它可能会令人惊讶。考虑在没有FASTLIB的情况下重新打包KOTLIN编译器依赖项。
我为它创建了一个官方的kotlin bug。请看,包含的任何第三方库都应该在不同的包中加前缀,或者从最终的jar中排除。
<dependency>
<groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId>
<version>8.2.1</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-compiler-embeddable</artifactId>
<version>1.4.30</version>
</dependency>