gpt4 book ai didi

Gradle 插件的传递依赖项干扰和破坏构建

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

我在一个多模块项目中使用 Gradle 6.1。我也在使用两个插件:kotlin("jvm")id("com.google.cloud.tools.jib") ,它们被加载到以下模块中:

root/
build.gradle.kts loads kotlin("jvm")
services/
my-service/
rest/
build.gradle.kts loads id("com.google.cloud.tools.jib")

(还有更多的模块、文件等,但这些都是相关的。)

构建失败:
$ ./gradlew clean jibDockerBuild
...
* What went wrong:
Execution failed for task ':services:driver:rest:jibDockerBuild'.
> com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException: 'org.apache.http.client.config.RequestConfig$Builder
org.apache.http.client.config.RequestConfig$Builder.setNormalizeUri(boolean)'

我发现了这个问题:Kotlin 和 JIB 插件都对 org.apache.httpcomponents:httpclient 有传递依赖。 :Kotlin 需要 4.5.3 和 JIB 4.5.10。问题是,在这个项目设置中只加载了 4.5.3,并且 JIB 失败,因为新方法不可用。这可以通过 ./gradlew buildEnv 进行检查.

我找到了一种解决方法,我需要在主 Gradle 文件中的根级别加载两个插件(第一个似乎无关紧要);现在 ./gradlew buildEnv表明使用了更高的依赖版本,也用于 Kotlin(输出缩短且不完整):
classpath
+--- org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.3.61
| \--- org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61
| +--- de.undercouch:gradle-download-task:3.4.3
| | \--- org.apache.httpcomponents:httpclient:4.5.3 -> 4.5.10

它在这种情况下有效,但可能是新的库版本破坏了 Kotlin 插件。问题是插件及其依赖项在类路径上没有分离,这在 Jigsaw 等之前的 Java 上是正常的。Gradle 有什么办法能够分离依赖项,以便每个插件都使用它声明的版本?我在 Java 11 上构建,因此可以使用模块系统,但 Gradle 是否可以选择打开它?

编辑 :更新到 Kotlin 1.3.70 也解决了这个问题,因为它不再依赖于库。不过,一般问题仍然有效。

最佳答案

Is there any way for Gradle to be able to separate the dependencies so that each plugin uses exactly the version it declares



不。

所有插件共享相同的构建脚本配置: classpath
它遵循与应用程序依赖项相同的依赖项解析。因此,您可以强制对于此特定依赖项始终只使用特定版本:
buildscript {
configurations {
classpath {
resolutionStrategy {
force("org.apache.httpcomponents:httpclient:4.5.10")
}
}
}
}

这只是 之一许多您可以控制构建脚本依赖项的依赖项解析的方式。您还可以使用平台来建议依赖版本:
buildscript {
dependencies {
classpath(enforcedPlatform("org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE"))
}
}

有关更多信息,请参阅文档:
  • https://docs.gradle.org/current/userguide/resolution_rules.html
  • https://docs.gradle.org/current/userguide/platforms.html
  • 关于Gradle 插件的传递依赖项干扰和破坏构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726357/

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