`
Leon.Wood
  • 浏览: 288194 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Gradle笔记

 
阅读更多

6.1

每个构建包含一个或多个 "Project"

每个project包含一个或多个 "Task",每个 task 都是一个原子操作,或是编译一些文件,或是打jar包 ,或是生成javadoc

6.2

你可以用gradle命令来调用当前目录下的build.gradle文件,build.gradle通常称之为构建脚本;构建脚本中定义了一个项目和包含的任务

hello world:第一个构建脚本

在D盘根目录建立build.gradle的文件,内容如下:

task hello {

doLast {

println 'Hello world!'

}

}

在cmd下输入

d:

gradle -q hello

上面的实例定义了一个叫hello的task;当执行gradle hello时便会返回所提供的方法的结果

6.3 任务依赖

如下脚本

task hello << {

println 'Hello world'

}

task intro(dependsOn: hello)<<{

println 'Depends'

}

--------------------

执行

>gradle -q intro

Hello world!

I'm Gradle

6.6 动态任务

4.times { counter ->

    task "task$counter" << {

        println "I'm task number $counter"

    }

}

-----------------------------------

Output of gradle -q task1

 

> gradle -q task1

I'm task number 1

6.7 处理当前任务

4.times { counter ->

    task "task$counter" << {

        println "I'm task number $counter"

}

}

task0.dependsOn task2, task3

----------------------------

Output of gradle -q task0

 

> gradle -q task0

I'm task number 2

I'm task number 3

I'm task number 0

 

 

task hello << {

    println 'Hello Earth'

}

hello.doFirst {

    println 'Hello Venus'

}

hello.doLast {

    println 'Hello Mars'

}

hello << {

    println 'Hello Jupiter'

}

 

do.first和do.last可被执行多次,执行顺序按first..last

<< 操作符相当于 doLast的别名

 

6.8 获取任务名称

可以用$task.name来获取任务名称

task hello << {

    println 'Hello world!'

}

hello.doLast {

println "Greetings from the $hello.name task."

}

6.9

扩展参数

task myTask {

ext.myProperty = "myValue"

}

 

task printTaskProperties << {

println myTask.myProperty

}

Output of gradle -q printTaskProperties

 

> gradle -q printTaskProperties

myValue

 

6.12

默认任务

defaultTasks 'clean', 'run'

 

task clean << {

println 'Default Cleaning!'

}

 

task run << {

println 'Default Running!'

}

 

task other << {

println "I'm not a default task!"

}

Output of gradle -q

 

> gradle -q

Default Cleaning!

Default Running!

 

-------------------------

task distribution << {

    println "We build the zip with version=$version"

}

 

task release(dependsOn: 'distribution') << {

    println 'We release now'

}

 

gradle.taskGraph.whenReady {taskGraph ->

    if (taskGraph.hasTask(release)) {

        version = '1.0'

    } else {

        version = '1.0-SNAPSHOT'

    }

}

 

7:JAVA quickStart

7.2 使用JAVA plugin

apply plugin :'java'

可参考示例

samples/java/quickstart

该插件将会依据如下目录结构来检索你的项目

src/main/java

src/main/resources

src/test/java

src/test/resources

build/libs

build:你可以执行其中的build任务来对你的源码进行编译,单元测试以及打包

 gradle build

clean:执行清除任务,删除build目录,移除所有构建文件

assemble:编译并且打jar包,但不会执行单元测试,很多其它插件都可以增强该任务功能,比如如果添加了war plugin,该任将会打出war包

check:编译并且测试代码,如果添加了Code-quality插件,该任务同时会对代码风格进行检查

 

7.2.2 额外依赖

可以使用MAVEN中央仓库来获取依赖jar包

---定义仓库

repositories {

mavenCentral()

}

---增加依赖

dependencies {

compile group: 'commons-collections', name: 'commons-collections', version: '3.2'

testCompile group: 'junit', name: 'junit', version: '4.+'

}

7.2.3 自定义项目

7.2.4 发布jar包

uploadArchives{

repositories{

flatDir{

dirs 'repos'

}

}

}

执行gradle uploadArchives便可将jar包发布到respos文件夹下

7.3 创建eclipse项目

apply plugin: 'eclipse'

 

apply plugin: 'java'

apply plugin: 'eclipse'

 

//自定义属性

sourceCompatibility = 1.5

version = '1.0'

jar {

manifest {

attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version

}

}

//中央仓库

repositories {

mavenCentral()

}

//依赖JAR包

dependencies {

compile group: 'commons-collections', name: 'commons-collections', version: '3.2'

testCompile group: 'junit', name: 'junit', version: '4.+'

}

//给test任务传递参数

test {

systemProperties 'property': 'value'

}

//Jar包位置

uploadArchives {

repositories {

  flatDir {

  dirs 'repos'

  }

}

}

7.3.1 多项目管理

创建多项目脚本必须建立setting.gradle配置文件如下

include "shared", "api", "services:webservice", "services:shared"

7.3.2 公共配置

 

8. 基础依赖管理

8.3 配置依赖

8.4 外部依赖

定义

dependencies {

compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'

}

简要写法"group:name:version". 

dependencies {

compile 'org.hibernate:hibernate-core:3.6.7.Final'

}

8.5 gralde如何为外部依赖下载jar包?只需要定义一个仓库即可

至少需要定义一个仓库,也可以直接使用maven中央仓库或本地maven仓库

如下

使用中央仓库:

repositories {

mavenCentral()

}

使用自定义仓库

repositories {

maven {

url "http://repo.mycompany.com/maven2"

}

}

使用远程ivy仓库

repositories {

ivy {

url "http://repo.mycompany.com/repo"

}

}

使用本地ivy仓库

repositories {

ivy {

// URL can refer to a local directory

url "../local-repo"

}

}

一个项目可以包含多个仓库,Gradle将会在每个仓库中搜寻所需的依赖,当搜索到所需依赖时停止搜索

 

8.6 手工发布

依赖于各种好用的插件,通常无需对发布操作进行特殊处理;但需要通知gradle进行发布的位置

可以用uploadArchives task来完成此项工作;以下是一个发布到远程IVY仓库的示例

uploadArchives {

repositories {

ivy {

credentials {

username "username"

password "pw"

}

url "http://repo.mycompany.com"

}

}

}

现在,运行gradle uploadArchives,gradle将会构建并上传生成的jar包,同时生成并上传ivy.xml文件

---发布到maven仓库

apply plugin: 'maven'

 

uploadArchives {

repositories {

mavenDeployer {

repository(url: "file://localhost/tmp/myRepo/")

}

}

}

10.WEB application quickStart

本章介绍如何让gradle来为web应用提供支持,gradle为web应用开发提供了两个插件War plugin和jetty plugin

war plugin继承了java plugin为项目构建war包

jetty plugin继承了war plugin可以将你的web应用部署到jetty 容器中

当执行build命令时,gradle会寻找src/main/webapp下的源文件,并获取编译后的class和他们运行时的依赖打入war包中

10.2部署到容器中运行

使用插件apply plugin : 'jetty'

应用该插件时同时会应用war plugin,执行gradle jettyRun将会把你的项目部署到容器中

运行gradle jettyRunWar将会构建war包并部署到容器中

url,端口号等可以通过编辑脚本文件来进行加载

11.1 使用gradle命令行

你可以使用命令行一次执行多个任务,如

gradle compile test将分别执行compile和test任务,gradle会按命令中的顺序来依次执行每个任务,并且也会执行每个任务中的依赖,每个任务只会被执行一次;

如下示例

task compile << {

    println 'compiling source'

}

 

task compileTest(dependsOn: compile) << {

println 'compiling unit tests'

}

 

task test(dependsOn: [compile, compileTest]) << {

println 'running unit tests'

}

 

task dist(dependsOn: [compile, test]) << {

println 'building the distribution'

}

dist和test都依赖于complie,但compile只会被执行一次 执行结果如下

> gradle dist test

:compile

compiling source

:compileTest

compiling unit tests

:test

running unit tests

:dist

building the distribution

 

BUILD SUCCESSFUL

 

Total time: 1 secs

 

11.2 排除任务

你可以使用 -x参数来排除不需要执行的任务,让我们用上一个示例中的脚本来体验一下

> gradle dist -x test

:compile

compiling source

:dist

building the distribution

 

BUILD SUCCESSFUL

 

Total time: 1 secs

可以看到,test任务并没有被执行,即使它被dist任务所依赖,同时test任务所依赖的compileTest也同样没有被执行,

而像complie所依赖的除了test之外的任务仍然正常执行

11.3 持续构建-即使发生错误

默认情况下,Gradle在执行时如果发生错误会立即中止执行任务,这能使构建更快完成但无法查看更多其它的失败信息,

此时可以使用

-continue

参数,在一个构建中尽可能捕获更多的失败信息;

当增加此参数是,gradle会在其所依赖的任务成功执行的前提下独立的执行每个任务;例如,如果你使用了

'java'和'checkStyle'插件,即使你的代码规范检查和单元测试失败,gradle仍然可以运行checkStyle,执行单元测试并且构建javadoc;所有的错误都会在

P.S:只有其所依赖的任务成功执行之后任务才会被执行,所以如果当java代码编译失败时,单元测试任务即不会被执行,因为

test任务直接依赖于compileJava任务

 

11.4 任务名称简写

在执行任务时,只要键入的字符足以唯一区分出一个任务即可省去其它字符.如11.1示例

执行dist任务 输入gradle di即可

驼峰命名式简写.如11.1示例

要执行compileTest任务只需输入 gradle cT即可 当然输入 gradle cmopTest同样可以执行构建

11.5 执行gradle构建时,会默认执行当前目录下的构建文件;也可以用"-b"参数来指定其它构建文件;

如下示例

subdir/myproject.gradle

task hello << {

println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."

}

Output of gradle -q -b subdir/myproject.gradle hello

> gradle -q -b subdir/myproject.gradle hello

using build file 'myproject.gradle' in 'subdir'.

你也可以使用-q参数,仅仅指明project路径即可,在"多项目构建"中需要用-p参数来替代-b参数


1
0
分享到:
评论
1 楼 smart152819 2017-06-21  
夜行侠老师gradle教学视频
地址:http://www.itjoin.org/course/detail/575771f20cf22db210ccab6b
课时1:简单项目构建
课时2:springbootmaven项目构建
课时3:maven的插件
课时4:maven的生命周期以及常见问题
课时5:maven的私服
课时6:maven的继承与聚合
课时7:Springboot的freemark
课时8:Springboot的Websocket
课时9:Gradle的springboot项目构建
课时10:Gradle打包,发布
课时11:Gradle_Task
课时12:Gradle_内部运行原理以及自定义插件编写
课时13:Gradle_打zip包自动拷贝依赖
课时14:jar包如何运行到线上

相关推荐

    gradle笔记.docx

    《Gradle笔记——Java开发者的进阶指南》 Gradle,作为一款强大的构建工具,以其灵活性和高效性深受开发者喜爱,尤其在Java开发领域。它借鉴了Maven的优点,同时弥补了Maven的一些不足,使得项目构建过程更加简单且...

    Gradle笔记—构建基础

    本篇文章主要介绍一下Gradle的构建基础。它看起来似乎和android项目没多大关系,不能让人一下子理解android项目中的Gradle配置文件,但是这篇基础真的很重要。学习Gradle前,需要有一个Groovy语言的基础,以免被...

    Gradle笔记—Java构建入门

    Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码。而大部分的项目,它们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建代码,...

    git和gradle入门学习笔记

    Git 和 Gradle 入门学习笔记 Git 是一个分布式版本控制系统,Gradle 是一个基于 Apache Ant 和 Maven 的构建自动化工具。在本笔记中,我们将学习如何安装和使用 Git 和 Gradle。 Git 安装 要安装 Git,可以从 ...

    gradle学习笔记简书1

    Gradle 学习笔记简书1 本文档将对 Gradle 的基本命令、Groovy 语言基础和闭包委托进行详细的讲解。 Gradle 命令 ------------ ### 1. 生成 Wrapper 使用 `gradle wrapper` 命令可以生成 Wrapper。 ### 2. 打印...

    gradle学习笔记1

    **Gradle 学习笔记** Gradle 是一种高级的构建工具,它与 Maven 类似,主要负责管理和自动化软件项目的构建过程,包括管理依赖、编译、打包和部署等任务。然而,Gradle 提供了比 Maven 更高的灵活性,因为它的构建...

    Android Studio配合Gradle及Unity交互笔记

    ### Android Studio配合Gradle及Unity交互笔记 #### 一、Gradle安装与配置 ##### 1.1 Gradle安装步骤 根据文档中的指示,我们可以通过Scoop来安装Gradle。Scoop是一个Windows平台上的开源包管理器,它可以方便地...

    开发笔记Jni,使用gradle-experimental

    总结起来,这篇开发笔记是关于在Android Studio中使用gradle-experimental插件进行JNI开发的实践教程。通过学习,开发者可以掌握如何在Java应用中集成C/C++代码,提高性能并解决特定问题。博客链接提供的示例代码能...

    Groovy语法&Gradle配置学习笔记

    - **Gradle入门**:学习如何创建Gradle项目,配置build.gradle文件,以及执行基本的构建任务。 - **Gradle插件**:了解常用的Gradle插件,如Java插件,学会如何自定义和应用插件。 - **依赖管理**:熟悉Gradle的依赖...

    Android Studio配合Gradle及Unity交互笔记续

    总的来说,本文档为 Android Studio 和 Unity 的交互提供了详细的笔记,不仅说明了操作步骤,还分析了解决遇到问题的方法,并对比了不同交互方法的优缺点,对于移动游戏开发者在使用这两种工具时遇到的问题有一定的...

    android studio实现笔记本

    9. **gradle**: 这个目录包含了Gradle wrapper,用于自动下载和管理Gradle版本。 在实现笔记本应用的过程中,你需要关注以下几个核心概念: - **Activity**: Activity是Android应用的基本组件,代表用户可以看到并...

    Gradle.docx

    Gradle是一种流行的构建自动化工具,尤其在Java和Android开发中广泛使用。本文将深入探讨Gradle的核心概念、任务管理、项目结构、依赖管理和属性配置。 1. **Gradle任务和动作** - 每个Gradle项目至少包含一个`...

    基于Android Studio开发的笔记APP.rar

    确保Android SDK、JDK以及Gradle版本正确,并配置好Android Virtual Device (AVD)或连接真机设备用于调试。 2. **UI设计** 使用Android Studio内置的布局编辑器(XML)设计笔记APP的用户界面,通常包括主界面、...

    gradle-7.4.1

    增量编译 和 缓存改进,加快构建速度。 更加完善的 Kotlin DSL 支持,提升开发者的生产力。 改进的 Java、Groovy、和 Android 构建工具支持。 兼容性更强,支持更多第三方插件和工具链

    完整gradle脚本-Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab

    以上脚本给出了文章提到的代码片段如何引入项目中,并且是经过反复实测的,打包aab/apk时能自动添加exported字段,如果遇到任何问题,请邮件联系1638072596@qq.com,有更好的解决方法欢迎一起交流

    新笔记本,java、git、elasticsearch、mycat、设计模式、gradle、vue,_note-book.zip

    新笔记本,java、git、elasticsearch、mycat、设计模式、gradle、vue,_note-book

    gradle-git-properties:用于`git.properties` 文件生成的 Gradle 插件

    笔记 插件需要 Java 8+ 如果 Gradle 5.1.x 和 5.2.x 上缺少git.properties ,请使用gitPropertiesResourceDir配置不同的输出目录 由于 gradle-git-properties v2.x,我们需要 JGit 5.x,如果您有其他使用 JGit 1.4....

    guide-gradle-intro:关于如何使用Gradle和Open Liberty构建和测试简单Web应用程序的入门指南

    使用Gradle构建Web应用程序笔记该存储库包含指南文档源。 要以已发布的形式查看该指南,请在上进行查看。 了解如何使用Gradle和Open Liberty构建和测试简单的Web应用程序。您将学到什么您将学习如何使用Gradle war...

    李兴华--J2EE核心框架 笔记

    10. **Maven或Gradle**:作为构建工具,它们在管理依赖和构建流程中发挥着重要作用。笔记可能介绍如何配置和使用这些工具来构建J2EE项目。 通过李兴华老师的《J2EE核心框架 笔记》,学习者可以对J2EE有深入理解,并...

Global site tag (gtag.js) - Google Analytics