java - Gradle 依赖项分辨率从 4.10.3 更改为 6.1.1

标签 java gradle dependency-management

我目前正在尝试将我的项目 gradle 版本从 4.10.3 升级到 6.1.1。我面临的问题是依赖解析的更改,但我无法理解。我在迁移指南中没有看到任何对此的评论。

具体发生的情况是,一些(或全部)传递词现在被忽略了。以下是简化形式的设置:

我有项目Main和库BootMain 依赖于 Boot,如下所示:

implementation group: 'com.example', name: 'boot', version: '1.0'

Boot 依赖于 servlet-api

implementation group: 'javax.servlet', name: 'servlet-api', version: '2.5'

这是众多例子之一。在 4.10.3 中,Main 引用 ServletContext 没有问题。现在它可以在我的 IDE 中运行,但是 gradlewcompileJava 任务失败,并提示 ServletContext 是未知符号。

类似但不完全相同,我无法从不同的源集传递依赖项。这是第二个例子: 我有项目服务和库Commons。项目 Service 有一个名为 api 的附加源集。现在服务包含以下依赖项

apiImplementation group: "com.example", name: "commons", version: "1.0"

implementaiton sourceSets.api.output

在 4.10.3 中,这工作得很好,但在 6.1.1 中,我无法在 Service:main 中使用 commons 中的元素。我这里也有很多失败的案例。

通常我会假设我忘记了一些东西,并且我花了相当长的时间在网上搜索线索,但是看到它如何在 4.10.3 上完美运行,但在 6.1.1 上失败(没有其他更改)它必须是依赖解析的更改,或者语法的更改。无论哪种方式,我都无法找到有关特定主题的任何文档。我希望有人已经遇到过这个问题,并找到了解决方案。

最佳答案

您的主模块无法使用 servlet 类,因为 API and implementation separation :

The api configuration should be used to declare dependencies which are exported by the library API, whereas the implementation configuration should be used to declare dependencies which are internal to the component.

您正在使用实现配置,因此它的依赖项不会传递地公开。

尝试将 servlet 依赖范围更改为 api,或将 servlet 依赖项包含到主模块中。

关于java - Gradle 依赖项分辨率从 4.10.3 更改为 6.1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60053202/

相关文章:

intellij-idea - 在IntelliJ IDE中传递Cucumber功能参数

java - 我得到空字段 Unmarshalling a xml with spring-oxm

heroku - 如何让 Heroku 安装 devDependency?

svn - 同步版本控制和工件存储库

java - 在 build.gradle 中找不到参数的方法类路径()

java - SpringBoot无法基于JSON创建类的实例

java - 线性方程重新排列

java - 为什么 Hotspot JIT 不为长计数器执行循环展开?

intellij-idea - "Re-run SpringBoot Configuration Annotation Processor"在 Groovy、IntelliJ 和 Gradle 项目中

gradle - 如何在 Gradle 中为依赖版本定义变量