gpt4 book ai didi

java - 为什么在使用 gradle 的子项目中使用时缺少 jackson 库依赖项?

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

我有一个 gradle 项目 P,它有模块 A 和 B。模块 A 有这个 jackson 依赖项:

...
dependencies {
...
compile 'com.fasterxml.jackson.core:jackson-core:2.12.0-rc1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.12.0-rc1'
compile 'com.fasterxml.jackson.core:jackson-databind:2.12.0-rc1'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.0-rc1'
...
}
...

而模块 B 使用模块 A,并且不需要包含此依赖项,因为 jackson 用法已封装在模块 A 中。但是当从模块 B 执行的代码到达调用模块 A 的代码的语句时使用它,我得到异常:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/dataformat/xml/XmlMapper

如果我将相同的依赖项添加到模块 B 的 gradle.build 文件中,代码就可以工作。问题是,如果模块 A 不使用该库,我为什么要包含它们?不应该编译、打包模块 A 中的依赖项,以便在其他地方使用模块 A 时,其代码可以工作(使用其包含的依赖项,例如本例中的 jackson 库)

最佳答案

免责声明:我不了解 Gradle,但这听起来像是 Maven 和 Gradle 的共同问题。

您可以构建模块但不能运行模块这一事实意味着您没有将传递依赖项引入 Spring Boot fat jar。 Jackson 不会对元数据文件、类加载器等做任何奇怪的事情。它在一个 fat jar 子里与其他人一起玩得很好。

鉴于您没有共享很多构建文件,确定是否有某些东西排除了 Jackson XML 模块的最简单方法是运行 jar -xvf target/app.jar 和检查输出以查看它是否在其中。

如果不是,请寻找与 Maven 依赖插件的依赖树目标等效的 Gradle,它将向您显示整个传递依赖树。如果它被排除在外,您肯定会看到它从依赖转储中丢失。

关于java - 为什么在使用 gradle 的子项目中使用时缺少 jackson 库依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64670278/

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