Gradle:创建含有多模块(即多个子项目)的项目


#Gradle#


示例1:各子项目单独配置

项目结构:

.
├── child1
│   ├── build.gradle
│   └── src
│       └── main
│           └── java
│               └── gradle
│                   └── hello
│                       └── child1
│                           └── Calculate.java
├── child2
│   ├── build.gradle
│   └── src
│       └── main
│           └── java
│               └── gradle
│                   └── hello
│                       └── child2
│                           └── CalculateService.java
├── build.gradle
└── settings.gradle

该示例中没有根项目,只有两个子项目child1child2

根目录文件

build.gradle 内容为空。

setting.gradle 内容如下:

rootProject.name = 'gradle-demo-0001'
include 'child1'
include 'child2'

child1/build.gradle 内容为:

group 'gradle.hello'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

child1 项目

child1 中的 build.gradle 内容如下:

group 'gradle.hello'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

child1 中的 Calculate 类内容为:

package gradle.hello.child1;

public class Calculate {

    public static int add(int a, int b) {
        return a+b;
    }

}

child2 项目

child2 中的 build.gradle 类内容为:

group 'gradle.hello'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile project(':child1')  // 声明对 child1 项目的依赖

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

child2 中的 CalculateService 类内容为:

package gradle.hello.child2;

import gradle.hello.child1.Calculate; // 注意,这个是 child1 中的类

public class CalculateService {

    public static void main(String[] args) {
        int result = Calculate.add(1, 2);
        System.out.println(result);
    }

}

运行 CalculateService ,会输出 3。

查看所有任务(包括子项目的任务)

$ gradle tasks --all

示例2:集中配置子项目

项目结构:

.
├── child1
│   └── src
│       ├── main
│           ├── java
│           │   └── gradle
│           │       └── hello
│           │           └── child1
│           │               └── Calculate.java
│           └── resources
├── child2
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── gradle
│       │   │       └── hello
│       │   │           └── child2
│       │   │               └── CalculateService.java
│       │   └── resources
├── build.gradle
└── settings.gradle

结构和示例1类似,但是 child1 和 child2 中没有 build.gradle 文件。

根目录下的 settings.gradle 内容:

rootProject.name = 'gradle-demo-0002'
include 'child1'
include 'child2'

根目录下的 build.gradle 内容:

group 'gradle.hello'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

subprojects { // 给所有的子项目进行配置
    apply plugin: 'java'

    repositories {
        mavenCentral()
    }

}

// 配置 child1 子项目
project(":child1") {

    dependencies {

        testCompile group: 'junit', name: 'junit', version: '4.12'

    }
}

// 配置 child2 子项目
project(":child2") {

    dependencies {

        compile project(":child1")  // 声明对 child1 的依赖

        testCompile group: 'junit', name: 'junit', version: '4.12'
    }

}

执行 child2 下的 CalculateService ,会输出 3。

示例3:同时配置子项目和根项目

项目结构:

.
├── settings.gradle
├── build.gradle
├── child1
│   └── src
│       ├── main
│           ├── java
│           │   └── gradle
│           │       └── hello
│           │           └── child1
│           │               └── Calculate.java
│           └── resources
├── child2
│   └── src
│       ├── main
│           ├── java
│           │   └── gradle
│           │       └── hello
│           │           └── child2
│           │               └── CalculateService.java
│           └── resources
└── src
    ├── main
        ├── java
        │   └── gradle
        │       └── hello
        │           └── Main.java
        └── resources

结构和示例2类似,但是在根目录下增加了 src 目录,作为根项目的内容。

根项目下 src 目录中的 Main.java 内容如下:

package gradle.hello;

import gradle.hello.child1.Calculate; // 这是 child1 项目中的类

public class Main {

    public static void main(String[] args) {
        int result = Calculate.add(1, 2);
        System.out.println(result);
    }
}

根目录下 settings.gradle 内容如下:

rootProject.name = 'gradle-demo-0003'
include 'child1'
include 'child2'

根目录下 build.gradle 内容如下:

group 'gradle.hello'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8



allprojects { // 给根项目和所有的子项目进行配置
    apply plugin: 'java'

    repositories {
        mavenCentral()
    }

}

project(":child1") {  // 配置子项目 child1

    dependencies {

        testCompile group: 'junit', name: 'junit', version: '4.12'

    }
}

project(":child2") {  // 配置子项目 child2

    dependencies {

        compile project(":child1") // 依赖子项目 child1

        testCompile group: 'junit', name: 'junit', version: '4.12'
    }

}

// 配置根项目(rootProject)
dependencies {

    compile project(":child1") // 依赖子项目 child1

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

运行 Main 类,会输出3。


( 本文完 )