gradle 简介

基于Groovy实现的自动化构建工具,比maven好的一点在于不用写复杂的xml文件。使用script就可以。

gradle 专业名词

从一个build.gradle 文件开始,build.gradle 文件就是maven中pom.xml

buildscript {
    repositories {
        mavenCentral()
        maven {
            url 'file:local_repo'
        }
        }
    dependencies {
        classpath group: 'test', name: 'build-plugin',
                version: '1.0'
    }
}

apply plugin: 'com.stone.build'
plugins {
  id "net.saliman.cobertura" version "2.3.2"
}
subprojects { subproject ->

    apply plugin: 'eclipse'
    apply plugin: 'java'
    repositories {
        mavenCentral()
    }
    dependencyManagement {
    dependencies {
        //common dependency
        dependency "commons-io:commons-io:$COMMON_VERSION"
        }
    }
    dependencies {
        compile 'commons-io:commons-io'
        compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
        testCompile group: 'junit', name: 'junit', version: '4.+'
    }
}
task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

buildscript

buildscript 中指定当前这个build.gradle 的执行环境。

repository 指定当需要下载依赖时查找的中心库

apply plugin 引用gradle插件,gradle有很多已有的plugin。或者你可以定制一个。查询已有的pluginhttps://plugins.gradle.org

plugins apply plugin 的简化写法,gradle 2.1 中引入的。没必要再写dependency,然后使用apply plugin 引入

subproject 定义子project的共同行为

dependencyManagement 当有多个project,各个project有一些共同的jar包依赖。在这边声明jar包的统一版本.

这边只是声明,并没有引入,需要在dependencies中引入。如果在dependencies中没有定义jar包版本,则继承dependcyManagement中的jar包版本。否则会覆盖

dependencies 工程依赖的jar包

wrapper 指定project 运行的gradle 版本。生成gradlew 可执行文件。运行./gradlew build时会去下wrapper task 中指定的gradle 版本。这样可以运行在没有安装gradle 的环境。当然如果你的环境中已经安装了gradle,而且可以运行project.可以直接使用gradle build命令。

gradle 常见命令

gradle buildEnvironment 查看build script 块中定义的dependencies

gradle -q dependencies $subprojectname:dependencies

列出subproject 的包依赖

gradle plugin开发

gradle 支持自定义plugin。开发很简单。实现Plugin 即可。

https://github.com/davenkin/gradle-learning/tree/master/10-custom-plugin

这边主要介绍另外一种,将task与project 解耦的方法。

定义task

继承DefaultTask,然后在@TaskAction 方法中定义Task执行的具体任务

package davenkin

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class ShowTimeTask extends DefaultTask {
    @TaskAction
    def showTimeTask(){
        println "Current time is " + new Date().format(project.dateAndTime.timeFormat)
    }
}

向project中注入task

plugin实现Plugin,然后通过project.task注入。

package davenkin

import org.gradle.api.Plugin
import org.gradle.api.Project
import davenkin.ShowTimeTask
import davenkin.ShowDateTask

class DateAndTimePlugin implements Plugin<Project> {
    void apply(Project project) {

        project.extensions.create("dateAndTime", DateAndTimePluginExtension)

        project.task('showTime', type: ShowTimeTask);
        project.task('showDate', type: ShowDateTask);
    }
}

源码:https://github.com/FS1360472174/gradle-learning/tree/master/10-custom-plugin/create-plugin-in-standalone-project-withTask

plugin publish

artifactory {
        clientConfig.setIncludeEnvVars(true)
        contextUrl = 'http://localhost:8081/artifactory/'
        publish {
            repository {
                repoKey = 'libs-release-local'
                username = "admin"
                password = "password"
            }
        }
    }

publishing {
    publications {
        mavenJar(MavenPublication) { from components.java }
    }
}

artifactoryPublish { publications('mavenJar') }

如果artifactory中没有自定义publications。在artifactory中也可以指定默认的publish内容。

gradle issues

Q1: gradle设置多个repo,不生效,只会找最上面的一个repo

A1: 将多个url分开写。将mavenCentral()放在最上面

mavenCentral()

maven { url }

maven { url ‘file:local_repo’}

参考

https://plugins.gradle.org

https://docs.gradle.org/current/userguide/custom_plugins.html

https://plugins.gradle.org/plugin/net.saliman.cobertura

http://buransky.com/scala/publish-jar-artifact-using-gradle-to-artifactory/

gradle 入门介绍的更多相关文章

  1. AndroidStudio下gradle的入门介绍与使用

    參考: 网易云加密:http://apk.aq.163.com 网易云捕:http://crash.163.com 1 Groovy Groovy 是没有类型的 Java 代码 ,语法更简洁.形式有点 ...

  2. Android CoordinatorLayout 入门介绍

    Android CoordinatorLayout 入门介绍 CoordinatorLayout View 知道如何表现 在 2015 年的 I/O 开发者大会上,Google 介绍了一个新的 And ...

  3. gradle入门

    gradle入门 简介: Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于 ...

  4. 项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程

    之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估 ...

  5. 项目自动化建构工具gradle 入门4——javaWeb在浏览器中显示helloWorld

    在java应用中,其实做的最多的还是java web应用.所以现在我们做的就是用gradle构建一个简单的web项目,简单点,直接上代码吧. 1.进入目录D:\work\gradle\web,新建文件 ...

  6. 项目自动化建构工具gradle 入门3——生一个exe的helloWorld

    前两次呢,我们能够用一个外部的jar 来实现输出helloWorld.但问题是我每次都要用java -jar 来执行,这样我们自己玩还可以,让用户玩就不好了.所以我们生成一个exe给他们吧.这次我们仍 ...

  7. 项目自动化建构工具gradle 入门2——log4j输出helloWorld

    上一章节呢,有一个能跑的程序了.但是对做工程的人来说,用日志输出感觉比用System.out要有档次一点.比如使用log4j.直接上例子: 1进入D:\work\gradle\log目录  ,您电脑没 ...

  8. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  9. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

随机推荐

  1. 用js来实现那些数据结构05(栈02-栈的应用)

    上一篇文章我们一起实现了栈,那么这一篇文章我们一起来用栈解决问题.看看如何用栈来解决进制转换,平衡圆括号以及汉诺塔问题,使我们对栈有更为深入的理解. 1.进制转换 我们先来看看十进制如何转换成二进制, ...

  2. libevent源码阅读笔记(一):libevent对epoll的封装

    title: libevent源码阅读笔记(一):libevent对epoll的封装 最近开始阅读网络库libevent的源码,阅读源码之前,大致看了张亮写的几篇博文(libevent源码深度剖析 h ...

  3. [原创软件]Maya报错窗口监测器

    软件主要功能: 监测Maya软件运行状态,如弹出报错窗口,则自动点击关闭 程序界面截图: 开发环境及语言: c# .NET Framework 4.0 Visual Studio 2015 更新日志: ...

  4. Linux OpenGL 实践篇-5 纹理

    纹理 在之前的实践中,我们所渲染的物体的表面颜色都是纯色或者根据顶点位置计算出的一个颜色,这种方式在表现物体细节方面是比较吃资源的,因为我们每增加一个细节,我们就需要定义更多的顶点及其属性.所以美术人 ...

  5. 浅谈linux静态库、动态库。

    动态库又叫动态共享文件(.so,Dynamic Shared Objects)和静态库(.a)都是将一些待重用的公共代码打包成一种特殊的重定位目标文件. 在使用时,连接器会将静态库中所有的代码,编译到 ...

  6. [bzoj 1293] [SCOI2009] 生日礼物

    传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...

  7. hdu 5464(dp)

    题意: 给你n个数,要求选一些数(可以不选),把它们加起来,使得和恰好是p的倍数(0也是p的倍数),求方案数. - - 心好痛,又没想到动规 #include <stdio.h> #inc ...

  8. Python IDLE背景主题

    相信刚进入python学习之路的朋友们,都还是挺喜欢python自带的IDLE,但是白的代码背景色以及其它的代码色确实让人看着有点不舒服,所以当时也琢磨着能不能自己给它换换颜色,这个当然可以,废话不多 ...

  9. Redis从入门到精通:初级篇

    原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...

  10. js页面刷新跳转的几种方式及区别

    跳转常用方法: window.location.href="index.php"; window.history.back(-1);//类似于按钮,参数是负几,就后退几次. win ...