gpt4 book ai didi

maven - 使用 Maven 解决库冲突

转载 作者:行者123 更新时间:2023-12-04 08:08:37 26 4
gpt4 key购买 nike

从 kotlin 1.4.30 开始,kotlin-compiler-embeddable 依赖项已将“fastutil”库的文件包含在其主 jar 包中。这个问题与我在 pom.xml 文件中本地指定的 fastutil 版本冲突。
有什么方法可以包含 1.4.30 kotlin-compiler-embeddable 依赖项并忽略/it/unimi/dsi/fastutil 文件夹,这样它只会使用我指定的版本?
kotlin-compiler-embeddable 布局的屏幕截图:
enter image description here
项目在这里:https://gofile.io/d/9m5LiV

import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap // Default imports from the kotlin-compiler-embeddable lib

fun main(args: Array<String>) {
// http://fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap.html#%3Cinit%3E(int)
// ^ this is possible when you dont have a kotlin-compiler-embeddable conflict
// Because its importing this class from the kotlin-compiler-embeddable library
// instead of the fastutil library itself
val map = Int2ObjectOpenHashMap<String>(10)
println("Hello World!")
}

最佳答案

早在 2008 年,Maven 2.0.9 就引入了对类路径的依赖关系的确定性排序。
如果您有 2 个包含相同类的依赖项,则 pom 中提到的第一个会获胜。
您可以使用 mvn dependency:build-classpath检查类路径。
在您的情况下,将 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>
笔记:
  • 你问题的措辞令人费解。 kotlin-compiler-embeddable 是项目中的常规依赖项,而不是插件。
  • 我查了一下 kotlin-compiler也引入了 faSTLib,所以用它代替 kotlin-compiler-embeddable不会有帮助
  • 缺少构造函数的问题来自这样一个事实,即 kotlin 没有引入 fastutil 本身,而是一个重新打包的版本 intellij-deps-fastutil-8.3.1-1。请参阅提交:Add fastutil dependency for 202 and higher platforms
  • 如果您打算将您的应用程序作为 uber-jar 分发,请务必检查您的打包程序选项。 Maven shade 插件具有强大的过滤工​​具。
  • 尽管依赖类路径顺序可以快速实现和工作,但它可能会令人惊讶。考虑在没有 faSTLib 的情况下重新打包您的 kotlin 编译器依赖项。
  • 关于maven - 使用 Maven 解决库冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66092841/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com