我有这样一种情况,我在一个公共(public)目录(如项目)下有单独的项目 PROJECT_A 和 PROJECT_B。我的项目文件夹看起来像
Project
- PROJECT_A
- PROJECT_B
现在我可以用一个 build.gradle 文件来构建这两个项目吗?
注意:我不想为 PROJECT_A 和 PROJECT_B 使用单独的 build.gradle 文件,但是 gradle 文件可以为构建每个项目执行不同的任务
最佳答案
这是一个示例,说明如何使用单个 build.gradle 拥有多个子项目。
项目结构有两个子项目,foo
和bar
,每个子项目只有一个java类Foo.java
和Bar .java
。否则该目录只包含默认的 gradle 目录和脚本:
├── bar
│ └── src
│ └── main
│ └── java
│ └── org
│ └── example
│ └── Bar.java
├── build.gradle
├── foo
│ └── src
│ └── main
│ └── java
│ └── org
│ └── example
│ └── Foo.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
单个 build.gradle
文件如下所示。评论应该清楚地说明发生了什么:
group 'org.example'
version '1.0-SNAPSHOT'
// These settings apply to all subprojects but not the root project.
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
// Get a variable for each project.
Project foo = project(':foo')
Project bar = project(':bar')
// Configure the foo project as you would in foo/build.gradle.
// Just using a misc. dependency for example purpose.
configure(foo, {
dependencies {
implementation 'software.amazon.awssdk:s3:2.13.71'
}
})
// Configure the bar project as you would in bar/build.gradle.
// Just making bar depend on foo for example purpose.
configure(bar, {
dependencies {
compile foo
}
})
Foo.java
和 Bar.java
包含:
package org.example;
public class Foo {
public Foo() {
System.out.println("Hi, I'm Foo");
}
}
package org.example;
public class Bar {
public Bar() {
System.out.println("Hi, I'm Bar");
new Foo();
}
}
然后你就可以编译完整的项目了:
$ ./gradlew compileJava
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 466ms
3 actionable tasks: 3 executed
关于java - Gradle 使用单个 build.gradle 在多个项目上构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26013273/