Skip to content

Commit

Permalink
Fix #71: More flexible subproject directory layout
Browse files Browse the repository at this point in the history
  • Loading branch information
tlinkowski committed Sep 7, 2019
1 parent 8fa9176 commit 104a13f
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 14 deletions.
2 changes: 2 additions & 0 deletions README.md
Expand Up @@ -88,6 +88,8 @@ Configures:

- subprojects in `subprojects` directory
- build file names changed from `build.gradle.kts` to `<subproject-name>.gradle.kts`
- build files required for all subprojects
- subprojects optionally grouped under subdirectories (e.g. `subprojects/sample/pl.tlinkowski.xyz.sample`)

### Project Plugin (id: `pl.tlinkowski.gradle.my.superpom`)

Expand Down
Expand Up @@ -69,24 +69,27 @@ class MySettingsGradlePlugin : Plugin<Settings> {

//region ADAPTED FROM: https://aalmiray.github.io/kordamp-gradle-plugins/#_project_structure
private fun Settings.configureProjectStructure() {
listOf("subprojects").forEach { includeSubprojects(rootDir.resolve(it)) }
listOf("subprojects").forEach { includeSubprojectsRecursive(rootDir.resolve(it)) }
}

private fun Settings.includeSubprojects(groupDir: File) {
requireNotNull(groupDir.listFiles(), { groupDir })
private fun Settings.includeSubprojectsRecursive(dir: File) {
requireNotNull(dir.listFiles(), { dir })
.filter { it.isDirectory }
.forEach { includeSubproject(it) }
.forEach { includeSubprojectOrGroup(it) }
}

private fun Settings.includeSubproject(subprojectDir: File) {
val subprojectName = subprojectDir.name
val buildFile = subprojectDir.resolve("$subprojectName.gradle.kts")
private fun Settings.includeSubprojectOrGroup(dir: File) {
val subprojectName = dir.name
val buildFile = dir.resolve("$subprojectName.gradle.kts")

include(subprojectName)

val subproject = project(":$subprojectName")
subproject.projectDir = subprojectDir
subproject.buildFileName = buildFile.name
if (buildFile.exists()) {
include(subprojectName)
val subproject = project(":$subprojectName")
subproject.projectDir = dir
subproject.buildFileName = buildFile.name
} else {
includeSubprojectsRecursive(dir)
}
}
//endregion
}
Expand Up @@ -67,4 +67,15 @@ class MySettingsGradlePluginSmokeTest extends Specification {
then:
result.output.contains("Failed to apply plugin [id '$settingsPluginId']")
}

def 'plugin loads nested `sample` subproject'() {
given:
runner.createSubprojectsDir()
runner.createSubproject("group/sample")
when:
def result = runner.build()
then:
result.task(":build").outcome == TaskOutcome.SUCCESS
result.task(":sample:build").outcome == TaskOutcome.SUCCESS
}
}
Expand Up @@ -39,8 +39,9 @@ internal class MySettingsSmokeTestRunner {
mkdir()
}

fun createSubproject(name: String) = file("subprojects/$name").apply {
mkdir()
fun createSubproject(subpath: String) = file("subprojects/$subpath").apply {
val name = subpath.substringAfterLast('/')
mkdirs()
resolve("$name.gradle.kts").writeText(`build-gradle-kts`)
}

Expand Down

0 comments on commit 104a13f

Please sign in to comment.