Gradle 笔记

2019-07-24 14:36:53 浏览数 (1)

Gradle 可以代替 Maven 完成自动化构建。

Gradle 结构

  • setting.gradle // 确定参与构建的 Project 集合
    • build.gradle // 执行 Task 的必备信息
      • TaskA // 最小执行单元
      • TaskB
      • ...

最基本的任务定义

Task 是 Gradle 构建的最小执行单元。 clean 就是一种最常见的 Task。

Task 就相当于 Java 中的一个类,继承于基类 DefaultTask,也可以再被子 Task 集成

代码语言:javascript复制
// build.gradle
task hello {
	println "配置阶段执行"
  doFirst {
    println '最先执行'
  }
	doLast {
		println '最后执行'
  }
}
代码语言:javascript复制
$ gradle hello
> Configure project :
配置阶段执行

> Task :hello
最先执行
最后执行

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

常用命令:

  • gradle init 用于创建项目骨架

单个 Java 项目构建

常用任务:

  • clean 删除 build 目录以及所有构建完成的文件。
  • assemble 编译并打包 jar 文件
  • check 编译并测试代码。
  • dependencies 添加外部依赖

Java 项目 build.gradle 示例

代码语言:javascript复制
apply plugin: 'java' // 使用 Java 插件。可用于自动寻找对应目录,及其他默认配置
apply plugin: 'eclipse' // 使用 eclipse 插件。
sourceCompatibility = 1.5 // 编译级别
version = '1.0' // 代码版本
jar {  // 为 jar (打包)任务的 manifest 模块增加属性定义
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
    }
}
repositories { // 配置 Gradle 的依赖源,此处使用 Maven 作为依赖源
    mavenCentral()
}
dependencies { // 配置项目依赖,相当于 Maven 种的 dependencies
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4. '
}
test { // 为测试任务增加属性定义
    systemProperties 'property': 'value'
}
uploadArchives { // 发布 Jar 包
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

多个 Java 项目构建

项目结构

代码语言:javascript复制
multiproject/
  api/
  services/webservice/
  shared/

此处有三个工程。api 工程用来生成给客户端用的 jar 文件,这个 jar 文件可以为 XML webservice 提供 Java 客户端。webservice 是一个 web 应用,生成 XML。shared 工程包含的是前述两个工程共用的代码。

  1. 多项目构建定义 定义一个多项目构建工程需要在根目录(本例中与 multiproject 同级)创建一个setting 配置文件来指明构建包含哪些项目。并且这个文件必需叫 settings.gradle 本例的配置文件如下: // /settings.gradle include "shared", "api", "services:webservice", "services:shared"
  2. 公共配置 对多项目构建而言,总有一些共同的配置.在本例中,我们会在根项目上采用配置注入的方式定义一些公共配置。根项目就像一个容器,子项目会迭代访问它的配置并注入到自己的配置中。这样我们就可以简单的为所有工程定义主配置单了: // /build.gradle subprojects { apply plugin: 'java' apply plugin: 'eclipse-wtp' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } version = '1.0' jar { manifest.attributes provider: 'gradle' } } 注意: 这里为每个子项目都应用了 Java 插件。
  3. 多项目中的工程依赖 // /api/build.gradle dependencies { compile project(':shared') }
  4. 打包发布 task dist(type: Zip) { dependsOn spiJar from 'src/dist' into('libs') { from spiJar.archivePath from configurations.runtime } } artifacts { archives dist }

0 人点赞