如何获取 Gradle 项目的所有配置列表?



我正在尝试获取依赖项洞察或依赖项 gradle 任务的--configuration标志的所有有效值的列表。我将如何使用 Gradle 3.2.1 执行此操作?

你试过吗:

configurations.each { println it.name }

尝试

gradle --console plain dependencies | fgrep ' - '

依赖项任务列出了所有配置(及其依赖项),fgrep 将仅显示配置名称(以及每个配置的简要说明)。 它不是很好,但不需要你在构建脚本中放东西。

使用Gradle 5 使用--info选项非常简单。例如:

./gradlew projects --info

现在查看列出所有配置的Configure project部分。

将此添加到根项目:

allprojects {
repositories {
// ....
}
task printConfigurations {
doLast {task ->
println "Project Name: $project.name configurations:"
configurations.each {
println "    $it.name"
}
}
}
}

然后,例如:

$ ./gradlew -q :SubProjA:printConfigurations
Project Name: SubProjA configurations:
-api
-runtime
annotationProcessor
api
apiDependenciesMetadata
apiElements
archives
compile
compileClasspath
compileOnly
compileOnlyDependenciesMetadata
default
implementation
implementationDependenciesMetadata
kotlinCompilerClasspath
kotlinCompilerPluginClasspath
kotlinKlibCommonizerClasspath
kotlinNativeCompilerPluginClasspath
kotlinScriptDef
kotlinScriptDefExtensions
runtime
runtimeClasspath
runtimeElements
runtimeOnly
runtimeOnlyDependenciesMetadata
sourceArtifacts
testAnnotationProcessor
testApi
testApiDependenciesMetadata
testCompile
testCompileClasspath
testCompileOnly
testCompileOnlyDependenciesMetadata
testImplementation
testImplementationDependenciesMetadata
testKotlinScriptDef
testKotlinScriptDefExtensions
testRuntime
testRuntimeClasspath
testRuntimeOnly
testRuntimeOnlyDependenciesMetadata
gradle proj:resolvableConfigurations | grep "^Configuration"

您可能想要:dependencyInsightruntimeClasspath配置。

解释:

实际上有一个内置的任务resolvableConfigurations(从 Gradle 7.5 开始),因此不再需要在构建脚本中使用自定义配置打印逻辑。

它的输出相当冗长,作为找出配置列表的手段有点笨拙 -grep提取名称行。当然,您可以更进一步,删除"配置"一词以仅获得名称:

gradle proj:resolvableConfigurations | grep "^Configuration" | sed "s/Configuration //g"

这是 Kotlin DSL (build.gradle.kts) 等价于其他答案:

configurations.forEach(::println)

将上述语句放在 build.gradle.kts 文件的顶部。每当您运行任何任务(如构建)时,它都会打印如下内容:

configuration ':app:androidApis'
configuration ':app:androidJdkImage'
configuration ':app:androidTestAnnotationProcessor'
...

您还可以为此创建专用任务:

tasks.register("myConfigs") {
doLast {
configurations.forEach { println(it) }
}
}

从命令行运行任务,如下所示:

./gradlew myConfigs

以下是 Java 插件的所有配置:

https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_plugin_and_dependency_management

编译(已弃用) 编译时依赖项。由 实现。

实现扩展编译 仅实现依赖项。

编译 仅编译时依赖项,在运行时不使用。

编译类路径扩展编译,编译仅,实现编译 类路径,在编译源代码时使用。由任务编译Java使用。

注释处理器 编译期间使用的注释处理器。

运行时(已弃用)扩展编译运行时依赖项。取代 仅运行时。

仅运行时仅运行时依赖项。

运行时类路径扩展 运行时仅、运行时、实现运行时 类路径包含实现的元素以及运行时 只有元素。

testCompile(Deprecated) 扩展编译 的其他依赖项 编译测试。被测试实现取代。

test实现扩展test编译,实现实现 仅测试的依赖项。

testCompileOnly 仅用于编译测试的其他依赖项,而不是 在运行时使用。

testCompileClasspath extensions testCompile, testCompileOnly, test实现测试编译类路径,编译测试时使用 来源。由任务编译TestJava使用。

testRuntime(Deprecated) 扩展运行时,testCompile 附加 仅用于运行测试的依赖项。被 testRuntimeOnly 取代。

testRuntimeOnly 扩展 运行时 仅运行时依赖项 运行测试。

testRuntimeClasspath extensions testRuntimeOnly, testRuntime, test实现 用于运行测试的运行时类路径。由任务使用 测试。

档案 该项目制作的文物(例如罐子)。由任务使用 上传档案。

默认扩展运行时类路径 此项目的项目依赖关系。包含工件和 此项目在运行时所需的依赖项。

如果有人想在命令行上执行此操作:

gradle outgoingVariants

您必须进行一些解析,但您会看到类似以下内容:

--------------------------------------------------
Variant yummyDebugRuntimeElements
--------------------------------------------------
Description = Runtime elements for debug
Capabilities
- group:artifact:0.1 (default capability)
Attributes
- com.android.build.api.attributes.BuildTypeAttr               = debug
- com.android.build.api.attributes.ProductFlavor:default.      = yummy
- com.android.build.api.attributes.VariantAttr                 = debug
- com.android.build.gradle.internal.dependency.AndroidTypeAttr = Aar
- org.gradle.usage                                             = java-runtime
- org.jetbrains.kotlin.platform.type                           = androidJvm

...

使用Gradle Kotlin DSL @Mike Hanafey 的答案的变体,并添加了另一个仅打印可解析配置的任务(对于传递给dependencyInsight--configuration参数很有用)。

allprojects {
fun printConfigurations(filter: (Configuration) -> Boolean = { true }) {
configurations.filter(filter).forEach {
println("t${it.name}")
}
}
task("printConfigurations") {
doLast {
println("${project.name} configurations:")
printConfigurations()
}
}
task("printResolvableConfigurations") {
doLast {
println("${project.name} resolvable configurations:")
printConfigurations { it.isCanBeResolved }
}
}
}

只需在没有--configuration标志的情况下运行这些命令,输出的第一行将是可用配置的列表

相关内容

  • 没有找到相关文章

最新更新