如何跟踪泄漏的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的迹象。