我正在尝试从 Gradle 多模块项目中提取子项目名称,并将它们放入下面的多模块项目的列表中(即
["services", "shared"]
)
> gradle -q projects
------------------------------------------------------------
Root project 'multiproject'
------------------------------------------------------------
Root project 'multiproject'
+--- Project ':services'
\--- Project ':shared'
To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :api:tasks
到目前为止,我已经创建了一个 gradle 任务,并且正在获取详细信息,但我无法从
DefaultProject_Decorated
中提取项目名称,我尝试查看 gradle 文档,但没有太多帮助。
task('extractSubprojectName') {
def subProjects = []
println rootProject.getSubprojects() // [project :'services', project :'shared']
println rootProject.getSubprojects().getClass() // class java.util.TreeSet
rootProject.getSubprojects().each { module ->
println "Module : " + module // Module : project :'services'
println "Module Class: " + module.getClass() // Module Class: org.gradle.api.internal.project.DefaultProject_Decorated
// I am trying to achieve something like below
// subProjects.add(module.getProjectName()) // of course getProjectName() is madeup name which doesn't exits in DefaultProject_Decorated
// - business requirement on subProjects -
}
}
希望有没有更好的解决方案?否则我必须添加逻辑将其转换为字符串类型,然后从中提取名称。
从其源代码,
getName
可能就是你想要的:
tasks.register("zz") {
doLast {
println rootProject.getSubprojects()
println rootProject.getSubprojects().getAt(0).getName()
println rootProject.getSubprojects().getAt(0).getName().getClass()
}
}
$ ./gradlew zz
> Task :zz
[project ':aa', project ':bb']
aa
class java.lang.String
BUILD SUCCESSFUL in 684ms
1 actionable task: 1 executed
我也遇到了这个问题,尤其是对于
:feature:module
的情况。
我想你可能正在寻找
getPath
/ path
rootProject.subprojects {
println(name) // innermodule
println(displayName) //project ':outermodule:innermodule'
println(path) // :outermodule:innermodule
}