gradle 多module工程入门

这篇博客介绍了如何使用Gradle构建一个多模块的Java项目,包括创建子项目、配置settings.gradle、定义task以及管理子项目间的依赖。通过示例展示了如何新建task并在父工程和子工程间共享,以及如何指定子工程之间的依赖关系,使得web工程能依赖于services工程。同时,提到了如何设置版本号并在构建过程中清理和打包项目。
摘要由CSDN通过智能技术生成

先新建工程

  1. 新建couponApp 文件夹,cd进入,运行gradle init 新建工程,
    gradle init新建工程
  2. 把couponApp 里面的 app复制两份,分别改名为:services, data, integration
  3. 然后把之前创建的工程里面创建的项目里面的app文件夹复制到本次的couponApp文件夹下,命名为web
  4. 运行tree看下目录结构
@192 couponApp % tree        
.
├── build.gradle
├── data
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── com
│       │   │       └── xj
│       │   │           └── gradle
│       │   │               └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── com
│           │       └── xj
│           │           └── gradle
│           │               └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── integration
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── com
│       │   │       └── xj
│       │   │           └── gradle
│       │   │               └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── com
│           │       └── xj
│           │           └── gradle
│           │               └── AppTest.java
│           └── resources
├── services
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── com
│       │   │       └── xj
│       │   │           └── gradle
│       │   │               └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── com
│           │       └── xj
│           │           └── gradle
│           │               └── AppTest.java
│           └── resources
├── settings.gradle
└── web
    ├── build.gradle
    └── src
        ├── main
        │   ├── java
        │   │   └── com
        │   │       └── xj
        │   │           └── gradle
        │   │               └── App.java
        │   ├── resources
        │   └── webapp
        │       ├── index.html
        │       └── response.jsp
        └── test
            ├── java
            │   └── com
            │       └── xj
            │           └── gradle
            │               └── AppTest.java
            └── resources

59 directories, 20 files

  • 并在couponApp/settings.gradle里面添加子项目
rootProject.name = 'couponApp'
include('web')
include('services')
include('data')
include('integration')

新建task

  1. couponApp文件夹下面新建文件build.gradle,并新建一个task:
task printProjectName {
    doLast() {
        println project.name
    }
}
  1. 运行./gradlew pPN可以看到:
    gradle 运行task
  2. 上面的命令是运行的parent工程的task,如果想运行子项目的某个task,比如子项目build,可以通过:./gradlew :web:build这种方式
  3. 但是如果尝试运行./gradlew :web:pPN, 发现会运行失败,因为子项目并没有从parent 工程继承task,如果需要继承,需要做如下改变:
allprojects {
    task printProjectName {
        doLast() {
            println project.name
        }
    }
}

再次运行发现build成功,并且输出的工程名称为 web
5. 此时如果尝试运行./gradlew pPN, 发现子工程的task也跟着运行了:
gradle运行某个task
6. 如果此时只想把这个task放在子工程下,父工程让他没有,需要做:

subprojects {
    task printProjectName {
        doLast() {
            println project.name
        }
    }
}

再次运行,发现不会输出couponApp了
7. 此时会发现data,services以及integration的build.gradle 完全一样,这时可以在couponApp/build.gradle 里面写上:

subprojects {
    apply plugin: 'application'

    repositories {
        mavenCentral()
    }

    dependencies {
        testImplementation 'junit:junit:4.13.2'
    }

    task printProjectName {
        doLast() {
            println project.name
        }
    }
}

并把上面三个工程里面的build.gradle清空(web下面的不用改),最后先运行 ./gradlew clean, 然后运行build,发现其他几个均会生成build文件夹
8. 也可以在build.gradle 里面添加version,version = '1.0',这样在对应的libs文件夹下生成的包即会带有版本信息:

libs
└── data-1.0.jar

多个子工程的依赖

  1. 解压couponApp/web/build/libs/web-1.0.war可以看到,里面没有其他的包
  2. 如果想让web工程依赖于services工程,在build.gradle 最下方添加依赖:
subprojects {
    apply plugin: 'application'

    repositories {
        mavenCentral()
    }

    version = '1.0'
    group = 'com.xj.gradle'

    dependencies {
        testImplementation 'junit:junit:4.13.2'
    }



    task printProjectName {
        doLast() {
            println project.name
        }
    }
}


project(':web') {
    dependencies {
        implementation project(':services')
    }
}
  1. 再次解压,发现里面多了service-1.0.war的包了,说明依赖添加成功
  2. 运行./gradlew :web:dependencies, 输出里面有:
implementation - Implementation only dependencies for source set 'main'. (n)
+--- project services (n)
\--- javax.servlet:javax.servlet-api:3.1.0 (n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值