如何跟踪泄漏的Gradle API依赖项
如何跟踪泄漏的Gradle API依赖项,gradle,Gradle,build.Gradle.kts中有一个应用程序Gradle插件,按常规配置: plugins { //... application //... } application { mainClassName = "org.myapp.ApplicationKt" } 不同寻常的是,在运行gradlew install之后,Gradle API依赖项泄漏到生成的工件中: $ ls -lSrh myapp/build/install/myapp/lib ... -
build.Gradle.kts
中有一个应用程序
Gradle插件,按常规配置:
plugins {
//...
application
//...
}
application {
mainClassName = "org.myapp.ApplicationKt"
}
不同寻常的是,在运行gradlew install
之后,Gradle API依赖项泄漏到生成的工件中:
$ ls -lSrh myapp/build/install/myapp/lib
...
-rw-rw-r-- 1 8.1M Oct 17 20:53 groovy-all-1.3-2.5.12.jar
-rw-rw-r-- 1 12M Oct 17 20:53 elasticsearch-7.6.2.jar
-rw-rw-r-- 1 22M Oct 17 20:53 pulsar-client-2.4.0.jar
-rw-rw-r-- 1 137M Oct 17 20:53 gradle-api-6.6.1.jar
图书馆额外增加了大约1.5亿美元!同时,gradlew:myapp:dependencies
和任务的构建扫描中都没有gradleApi()依赖项。然而,运行gradlew:myapp:install--debug
清楚地表明,是的,Gradle API依赖关系在runtimeClasspath
中得到了解决:
2020-10-17T20:55:38.653+0700 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute copy for :myapp:installDist' started
2020-10-17T20:55:38.654+0700 [INFO] [org.gradle.api.internal.file.collections.DirectoryFileTree] file or directory '/home/user/project_repo.git/myapp/src/main/dist', not found
2020-10-17T20:55:38.654+0700 [INFO] [org.gradle.api.internal.file.collections.DirectoryFileTree] file or directory '/home/user/project_repo.git/myapp/src/dist', not found
2020-10-17T20:55:38.654+0700 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of :myapp:runtimeClasspath' started
2020-10-17T20:55:38.654+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match gradle-api-6.6.1.jar (Gradle API) from candidates [gradle-api-6.6.1.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.654+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match groovy-all-1.3-2.5.12.jar (Gradle API) from candidates [groovy-all-1.3-2.5.12.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.654+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match kotlin-stdlib-1.3.72.jar (Gradle API) from candidates [kotlin-stdlib-1.3.72.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.654+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match kotlin-stdlib-common-1.3.72.jar (Gradle API) from candidates [kotlin-stdlib-common-1.3.72.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.654+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match kotlin-stdlib-jdk7-1.3.72.jar (Gradle API) from candidates [kotlin-stdlib-jdk7-1.3.72.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.655+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match kotlin-stdlib-jdk8-1.3.72.jar (Gradle API) from candidates [kotlin-stdlib-jdk8-1.3.72.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.655+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match kotlin-reflect-1.3.72.jar (Gradle API) from candidates [kotlin-reflect-1.3.72.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.655+0700 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match gradle-installation-beacon-6.6.1.jar (Gradle API) from candidates [gradle-installation-beacon-6.6.1.jar (Gradle API)] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}
2020-10-17T20:55:38.655+0700 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Resolve files of :myapp:runtimeClasspath'
2020-10-17T20:55:38.655+0700 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of :myapp:runtimeClasspath' completed
如何跟踪泄漏相关性?原因是
kotlin dsl
为模块明确配置的插件:
plugins {
// ...
id("org.gradle.kotlin.kotlin-dsl")
// ...
}
一旦被注释掉,问题就消失了。真奇怪。。您是否尝试分析依赖关系图?这有助于定位哪个库正在将Gradle API库“引入”运行时类路径。是的,我也这样做了
:myapp:dependencies
——在它的输出中没有Gradle API的迹象。