Reputation: 741
I am trying to extract the subproject names from Gradle Multi Module project and put them in an list (i.e. ["services", "shared"]
) for below multi-module project
> 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
So far I have created a gradle task and I am getting details, but I could not able extract the project name out of DefaultProject_Decorated
, I tried to look in gradle doc but of not that much help.
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 -
}
}
Hoping if there is any better solution for it ? or else I have to add logic to convert it to string type and then extract the name out of it.
Upvotes: 0
Views: 1319
Reputation: 500
I had a similar issue where I needed to get the "full name", for a :feature:module
situation. I needed to use getPath
/ path
to get what I was interested in
rootProject.subprojects {
println(name) // innermodule
println(displayName) //project ':outermodule:innermodule'
println(path) // :outermodule:innermodule
}
For your purposes, maybe you need to call something like this?
val subProjectNames = rootProject.subprojects.map { it.path }
subProjectNames.forEach(::println)
Upvotes: 0
Reputation: 1884
From its source code, getName
might be what you want:
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
Upvotes: 0