Gradle 依赖解析从 4.10.3 更改为 6.1.1
Gradle Dependency resolution changes from 4.10.3 to 6.1.1
我目前正在尝试将我的项目 gradle 版本从 4.10.3 升级到 6.1.1。我面临的问题是对依赖项解析的更改,但我无法全神贯注。我在迁移指南中没有看到任何关于此的评论。
具体来说,似乎正在发生的事情是,一些(或所有)传递性现在被忽略了。这是简化形式的设置:
我有项目 Main 和库 Boot。 Main 依赖于 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 中工作,但是 gradlew compileJava 任务失败,说 ServletContext 是未知符号。
类似但不完全相同,我无法传递来自不同 sourceSet 的依赖项。这里是第二个例子:
我有项目 Service 和库 Commons。项目 Service 有一个名为 api 的附加源集。现在 Service 包含以下依赖项
apiImplementation group: "com.example", name: "commons", version: "1.0"
implementaiton sourceSets.api.output
对于 4.10.3,这工作得很好,但是对于 6.1.1,我无法在 Service:main[=45= 中使用来自 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.
您正在使用 implementation
配置,因此它的依赖项不会传递地公开。
尝试将 servlet 依赖范围更改为 api
,或将 servlet 依赖包含到主模块中。
我目前正在尝试将我的项目 gradle 版本从 4.10.3 升级到 6.1.1。我面临的问题是对依赖项解析的更改,但我无法全神贯注。我在迁移指南中没有看到任何关于此的评论。
具体来说,似乎正在发生的事情是,一些(或所有)传递性现在被忽略了。这是简化形式的设置:
我有项目 Main 和库 Boot。 Main 依赖于 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 中工作,但是 gradlew compileJava 任务失败,说 ServletContext 是未知符号。
类似但不完全相同,我无法传递来自不同 sourceSet 的依赖项。这里是第二个例子: 我有项目 Service 和库 Commons。项目 Service 有一个名为 api 的附加源集。现在 Service 包含以下依赖项
apiImplementation group: "com.example", name: "commons", version: "1.0"
implementaiton sourceSets.api.output
对于 4.10.3,这工作得很好,但是对于 6.1.1,我无法在 Service:main[=45= 中使用来自 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 theimplementation
configuration should be used to declare dependencies which are internal to the component.
您正在使用 implementation
配置,因此它的依赖项不会传递地公开。
尝试将 servlet 依赖范围更改为 api
,或将 servlet 依赖包含到主模块中。