This is my multi-project Gradle setup:
.
└── gradle-module-project
├── application
├── build.gradle.kts
├── gradlew
├── list
├── settings.gradle.kts
└── utilities
application, utilties and list are projects, and inside each one there is a Java Module.
That is, each project has its own src/main/java/module-info.java file and build.gradle.kts file.
application module depends on utilities module, and utilities module depends on list module.
build.gradle.kts at the root contains the following:
subprojects {
..
plugins.withType<JavaPlugin>().configureEach {
configure<JavaPluginExtension> {
modularity.inferModulePath.set(true)
}
}
..
}
What I find strange is that inside each sub-project, the build.gradle.kts is required to list the dependencies.
For example, application -> build.gradle.kts contains:
plugins {
application
}
dependencies {
implementation(project(":utilities"))
}
..
Why does build.gradle.kts for application have to include implementation(project(":utilities"))?
When the module-info.java inside application already specifies what that module depends on.
Doesn't this seem like duplication?
Is it intended that the dependency must be specified in both module-info.java and build.gradle.kts?