Gradle学习:创建任务、依赖管理、多项目构建

目录

创建gradle项目

Gradle添加插件

gradle中相关名词

任务(task)

gradle项目

自定义任务

依赖管理

多项目构建


  • 创建gradle项目

1.首先在IDEA中创建一个gradle的Java工程,IDEA会自动初始化工程目录以及相应的配置文件,其目录结构如下:

2.setting.gradle作用:该文件可以看做是子工程(即:Module)的配置文件,该setting文件在初始化的时候就会被执行,该文件中定义了哪些module应该被加入编译过程,对于只有一个module的项目,该文件没有什么作用,但对于包含多个module的项目,其作用就极其重要了,缺少该文件项目在启动的时候就不知道要加载哪些module;

rootProject.name = 'todo'

3.build.gradle作用:该文件也可看做module的配置文件,我们可以在该文件中配置插件、版本、依赖库等等的信息;对于包含多个module的project,每个module都有自己的build.gradle文件,同时整个project也会有一个build.gradle文件,该文件中定义的信息会被应用到所有的module中;

group 'com.thoughtworks'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

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

Gradle添加插件

需求:通过修改build.gradle文件,添加自动将project打包成war包的插件;

做法:只需要在build.gradle文件中添加一行如下代码即可;

apply plugin: 'war'

添加完成之后可以发现,在gradle视图中已经多出了一个war选项,点击该选项即可将project打包成war包;

 

  • gradle中相关名词

1.group、name、version:group是module所在组;name是module的名字,同一个组里name具有唯一性;version是module的版本号;group、name和version三者构成了该module的唯一性;

2.apply:在module中应用一个插件;

3.dependencies:用来声明module所依赖的jar包或其他module;

4.repositories:声明一个仓库,告诉程序到哪个仓库去找相应的module、jar包等依赖;

5.task:用来声明module的任务,其对应org.gradle.api.Task。


  • 任务(task)

1.任务主要包括任务动作和任务依赖。

          任务动作:定义了一个最小的工作单元;

          任务依赖:定义了所依赖的其他任务、动作序列和执行条件等;

2.dependsOn:用于声明任务依赖;

3.doFirst:在动作列表前面添加一个动作;

4.doLast:在动作列表后面添加一个动作,一个动作列表中可以添加多个doFirst和doLast;

5.<<:doLast的简写;


  • gradle项目

一个项目就代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且通过project变量使其隐式可见。

因此build.gradle中的写法都是Groovy的简写(对于Groovy不明白的,可以参考上一篇博文:Groovy基础知识介绍),其还可以换种写法如下:

group 'com.thoughtworks'
project.version = '1.0-SNAPSHOT'

apply plugin: 'java'
project.apply plugin: 'war'

点击任意字段进入源码中,可以看到group、version、apply、repositories等都是org.gradle.api.Project类中定义的方法;


  • 自定义任务

1.需求:自定义一个自动创建Java工程目录的任务,当目录存在时不进行创建,不存在时进行创建;

2.在build.gradle中创建任务:makeJavaDir

// 创建闭包
def createDir = {
    path ->
        File dir = new File(path)
        if(!dir.exists()){
            dir.mkdirs()
        }
}

// 创建任务
task makeJavaDir(){
    // 指定创建的目录结构
    def paths=['src/main/java', 'src/main/resources', 'src/test/java', 'src/test/resources']

    // 在任务列表前添加一个任务
    doFirst {
        paths.forEach(createDir)
    }
}

3.运行task后,在gradle视图中的other下面的任务列表中就会多一个makeJavaDir的任务选项;双击makeJavaDir即可执行该任务;


  • 依赖管理

1.工件坐标:可以理解为jar包,由group、name和version三者确定;

2.常用仓库:

      mavenLocal:本地maven仓库,本地下载的jar包通常都放在这里;

      mavenCentral/jenter:公用的仓库;build.gradle里就配置了公用仓库:

repositories {
    mavenCentral()
}

      自定义maven仓库:最常用的仓库也叫作私服,通常是公司内部搭建的为了方便公司内部管理jar包;

       注意:如果配置了多个仓库,那么按照仓库的顺序进行查找,当找到所需要的依赖之后就不在查找;

3.依赖关系:A依赖于B,B依赖于C,那么A也依赖于C;

4.依赖阶段配置:

       运行时依赖:compile、runtime:编译时依赖的运行时一定依赖,运行时依赖的编译时不一定依赖; 

       测试时依赖:testCompile、testRuntime:源码依赖的测试时一定依赖,测试时依赖的源码不一定依赖;

5.依赖写法:下面这个junit的测试时依赖由group、name、version三者组成,通过这三个字段在仓库中查找唯一的jar包;  

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

// group name  version可以省略,用冒号代替
testCompile 'junit:junit:4.12'

  • 多项目构建

1.创建model、repository、web三个子项目;

// 模块创建完成后settings.gradle文件中会自动配置所有模块信息
rootProject.name = 'todo'
include 'Model'
include 'Repository'
include 'Web'

2.创建模块依赖关系:repository依赖model,同时web依赖repository。

// 在子模块的build.gradle中添加Repository或者model依赖
dependencies {
    compile project(":Repository")
}

3.在根目录中添加所有项目的Java依赖;

// 在根目录下的build.gradle中添加所有项目的Java依赖
allprojects {
    apply plugin: 'java'
    sourceCompatibility = 1.8
}

4.给所有子项目添加Junit和logback的依赖;

// 在根目录的build.gradle中添加所有子项目的logback和Junit依赖
subprojects {
    repositories {
        mavenCentral()
    }

    dependencies {
        compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
        testCompile 'junit:junit:4.12'
    }
}

5.在web项目中添加war插件;

// 在web项目中添加war插件
apply plugin: 'war'

6.新建gradle.properties文件,统一配置所有项目的版本信息;

group='com.thoughtworks'
version='1.0-SNAPSHOT'

配置完成后跟目录下的build.gradle内容如下:

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'



// 配置所有项目的Java依赖
allprojects {
    apply plugin: 'java'
    sourceCompatibility = 1.8
}

// 配置子项目的Junit依赖
subprojects {
    repositories {
        mavenCentral()
    }

    dependencies {
        compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
        testCompile 'junit:junit:4.12'
    }
}



repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    testCompile 'org.springframework.boot:spring-boot-starter-test'

}

小结:

根目录下的build.gradle会对所有模块起作用,如果需要对所有模块进行构建,只需要对根目录进行构建即可;

子模块下的build.gradle只对本模块起作用,如果需要对单个模块进行构建,只需要对该模块进行构建即可; 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值