是否需要在 module-info.java 和 build.gradle.kts 中指定模块依赖关系
Is it a requirement to specify module dependencies in both module-info.java and build.gradle.kts
这是我的多项目 Gradle 设置:
.
└── gradle-module-project
├── application
├── build.gradle.kts
├── gradlew
├── list
├── settings.gradle.kts
└── utilities
application
、utilties
和list
是项目,每个项目里面都有一个Java模块。
也就是说,每个项目都有自己的 src/main/java/module-info.java
文件和 build.gradle.kts
文件。
application
模块依赖utilities
模块,utilities
模块依赖list
模块。
build.gradle.kts
根目录包含以下内容:
subprojects {
..
plugins.withType<JavaPlugin>().configureEach {
configure<JavaPluginExtension> {
modularity.inferModulePath.set(true)
}
}
..
}
我觉得奇怪的是,在每个子项目中,都需要 build.gradle.kts
来列出依赖项。
例如,application
-> build.gradle.kts
包含:
plugins {
application
}
dependencies {
implementation(project(":utilities"))
}
..
为什么 application
的 build.gradle.kts
必须包含 implementation(project(":utilities"))
?
当 application
中的 module-info.java
已经指定了该模块所依赖的内容时。
这不是重复的吗?
是否打算在module-info.java
和build.gradle.kts
中都指定依赖项?
当使用 Java 模块和 Gradle 时,必须指定两次依赖关系:一次是为了模块系统的利益,另一次是为了构建工具的利益。
我一直在关注 Java 9 Modularity 中 Sandor Mak 和 Paul Bakker 的 Easy Text 演示应用程序,这是一个 multi-module 项目。一个模块的 module-info.java
是:
module easytext.cli {
requires easytext.analysis;
}
当我将其包装在 Gradle 中时,在我的 build.gradle
文件中我还需要:
dependencies {
implementation project(':easytext.analysis')
}
也许工具赶上来只是时间问题,我们不必两者都做。
另请查看 Paul Bakker 的Java一个演示文稿Building JPMS Modules with Java,其中他介绍了 fine-detail 构建 multiple-module Java/Groovy/Kotlin 个项目 Gradle.
这是我的多项目 Gradle 设置:
.
└── gradle-module-project
├── application
├── build.gradle.kts
├── gradlew
├── list
├── settings.gradle.kts
└── utilities
application
、utilties
和list
是项目,每个项目里面都有一个Java模块。
也就是说,每个项目都有自己的 src/main/java/module-info.java
文件和 build.gradle.kts
文件。
application
模块依赖utilities
模块,utilities
模块依赖list
模块。
build.gradle.kts
根目录包含以下内容:
subprojects {
..
plugins.withType<JavaPlugin>().configureEach {
configure<JavaPluginExtension> {
modularity.inferModulePath.set(true)
}
}
..
}
我觉得奇怪的是,在每个子项目中,都需要 build.gradle.kts
来列出依赖项。
例如,application
-> build.gradle.kts
包含:
plugins {
application
}
dependencies {
implementation(project(":utilities"))
}
..
为什么 application
的 build.gradle.kts
必须包含 implementation(project(":utilities"))
?
当 application
中的 module-info.java
已经指定了该模块所依赖的内容时。
这不是重复的吗?
是否打算在module-info.java
和build.gradle.kts
中都指定依赖项?
当使用 Java 模块和 Gradle 时,必须指定两次依赖关系:一次是为了模块系统的利益,另一次是为了构建工具的利益。
我一直在关注 Java 9 Modularity 中 Sandor Mak 和 Paul Bakker 的 Easy Text 演示应用程序,这是一个 multi-module 项目。一个模块的 module-info.java
是:
module easytext.cli {
requires easytext.analysis;
}
当我将其包装在 Gradle 中时,在我的 build.gradle
文件中我还需要:
dependencies {
implementation project(':easytext.analysis')
}
也许工具赶上来只是时间问题,我们不必两者都做。
另请查看 Paul Bakker 的Java一个演示文稿Building JPMS Modules with Java,其中他介绍了 fine-detail 构建 multiple-module Java/Groovy/Kotlin 个项目 Gradle.