您可以在 IDE 中使用 IntelliJ 原生导入器 或 Eclipse Buildship 打开此示例。 |
定义和使用复合构建
此示例展示了如何将通常分别开发并使用二进制集成组合在一起的 2 个 Gradle 构建连接到具有源代码集成的复合构建中。my-utils
多项目构建生成 2 个不同的 Java 库,而 my-app
构建使用这些库中的函数生成可执行文件。
请注意,my-app
构建没有直接依赖于 my-utils
。相反,它声明了对 my-utils
生成的库的模块依赖关系。
my-app/app/build.gradle.kts
plugins {
id("application")
}
application {
mainClass = "org.sample.myapp.Main"
}
dependencies {
implementation("org.sample:number-utils:1.0")
implementation("org.sample:string-utils:1.0")
}
my-app/app/build.gradle
plugins {
id 'application'
}
application {
mainClass = 'org.sample.myapp.Main'
}
dependencies {
implementation 'org.sample:number-utils:1.0'
implementation 'org.sample:string-utils:1.0'
}
使用命令行复合构建
使用复合构建时,构建不需要共享存储库,并且不需要对构建脚本进行任何更改。
-
更改
Number.java
的源代码 -
运行
my-app
应用程序,包括my-utils
构建。
cd my-app
gradle --include-build ../my-utils run
使用依赖项替换,模块对 util 库的依赖项将被项目对my-utils
的依赖项替换。
将my-app
转换为复合构建
可以通过将my-app
设为包含my-utils
的复合构建,使上述安排持久化。
cd my-app
echo "includeBuild '../my-utils'" >> settings.gradle
gradle run
使用此配置,my-app
到my-utils
的模块依赖项将始终被项目依赖项替换。
虽然简单,但这种方法的缺点是修改了my-app
构建。
使用单独的复合构建
还可以创建一个单独的复合构建,其中包含my-app
和my-utils
构建。
settings.gradle.kts
rootProject.name = "my-composite"
includeBuild("my-app")
includeBuild("my-utils")
settings.gradle
rootProject.name = 'my-composite'
includeBuild 'my-app'
includeBuild 'my-utils'
完成此操作后,您可以直接在命令行中引用包含的构建中的任何任务以执行。
gradle :my-app:app:run
或者,您可以在复合项目中创建委托任务,以执行任务而无需指定完整的任务路径。
build.gradle.kts
tasks.register("run") {
dependsOn(gradle.includedBuild("my-app").task(":app:run"))
}
build.gradle
tasks.register('run') {
dependsOn gradle.includedBuild('my-app').task(':app:run')
}
gradle run