Gradle 10分钟上手指南
java的源码构建工具,大致经历了 ant -> maven -> gradle 这个过程,每一次进步,都是在解决之前的工具所带来的问题,简单来说:
1. ant 功能虽然也很强大,但是过于灵活,规范性不足,对目录结构及build.xml没有默认约定 ,10个程序员做同样的项目,可能最终出来的10个项目,目录结构和build.xml都不相同,而且没有统一的依赖项管理。
2. maven的出现,解决了规范的问题,也顺带解决了依赖项统一管理的问题,但是规范性又太强了,基本上可以认为是一种强规范,用久了之后,感觉灵活性显略不足,而且pom.xml采用xml结构,项目大了,xml就有些冗长。
3. gradle则是综合了ant与maven的优点,吸收了ant中task的思想,然后把maven的目录规范及仓库思想也融合进来了,但是允许用户自由修改默认的规范(比如:源代码目录可以自己指定),另外配置文件采用groovy语言来书写(格式初看上去有点类似json,比较精减),注意:groovy是一门真正的【可编程】语言,而不是象css、html之类的标记性「符号」,所以从这个意义上讲,配置文件build.gradle本身就是一份源代码,这份源代码,最终交由gradle来处理执行,完成代码的构建工作。
gradle的发展速度之快,是ant 与 maven所不能比拟的,看下gradle官网的文档就能感受到了,一个新兴的工具文档如此之齐全,可见大家对它的认可程度。
安装:
安装十分简单,到官司下载最新版(是一个压缩包),解压某个目录,然后在环境变量里添加GRADLE_HOME, 再把该变量添加到path路径中,保证能找到gradle命令即可,参考下面的环境变量设置:
...
export GRADLE_HOME=/Users/yjmyzz/app/gradle-2.7
...
export PATH="...bin:${GRADLE_HOME}/bin"
...
在终端下,输入gradle -version,如果能显示gradle的版本号,就表示ok了
下面结合intellij idea + gradle 简单记录一下用法(假设大家都有ant, 特别是 maven的使用经验,如果对maven完全不熟悉的朋友,建议先移步阅读一下本博客的maven入门文章)
一、idea导入gradle的几个设置要点
注意打红圈的地方,一定要勾上Offline work,否则会连到官司下载一堆东西,而墙内的速度,你们懂的,等到天昏地暗,海枯石烂也没有尽头
导入成功后,记得看下项目设置,参考上图,Use auto-import 这里记得要勾上,否则可能会遇到以下怪现象:
终端下gradle build 一切正常,但是在idea里,打开java源代码,看到各种红叉,提示这个类找不到,那个包没有引用。
提示:每个idea项目,项目根目录下都对应了一个.iml文件,它记录了该项目使用了哪些第3方的包,所以在IDE环境中,它才能感知到各种第3方的源代码,写代码时弹出各种智能下拉提示,有兴趣的话,建议大家看下这个文件的内容,肯定会有收获 。
二、gradle基本用法
基本上,gradle是通过各种plugin来完成相关功能的,这点是从maven学来的,所以基本上学习gradle,就是掌握一些常见plugin的用法及关键配置。
1、创建项目
随便建一个空目录,然后cd 进入
再
gradle init 就可以了
2、示例项目
我在github及coding.net上创建一个hello-gradle的项目,可以快速帮助大家快速掌握各种常规用法
https://coding.net/u/yjmyzz/p/hello-gradle/git
https://github.com/yjmyzz/hello-gradle
直接按README.md里的说法,全部自己练一次,就差不多可以满足日常开发需要了。
参考文章:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- varint是啥你真的知道么?
- 一篇文章带你入门移动安全
- Could not load JDBC driver class [com.mysql.jdbc.Driver]
- [Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库
- [Golang]包管理
- Power Query中避免出错的几种情况
- 我的开发日记(十五)
- 常见未授权访问漏洞总结
- 如何用命令行给mySQL添加用户
- [877]ModuleNotFoundError:no module named ‘tools.nnwrap‘ 解决办法
- Selenium自动化:代码测试与无代码测试
- 个人独立博客搭建教程(win),如何快速搭建博客
- dotnet OpenXML 解压缩文档为文件夹工具
- webpack实战——预处理器(loader)【上篇】
- Mac安装git,brew出现的问题