Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码。而大部分的项目,它 们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建代码,因为Gradle已经为我们提供了相应的插件。Gradle 本身自带了许多插件,而对于Gradle没有的插件,可以去github上看看有没有其他人实现,或自己实现。对Java项目而言,Gradle有 Java插件,提供了像编译、测试、打包之类的功能。

这里简单介绍一下Java插件。

Java插件为构建项目定义了许多的默认设置,像源文件目录,编译后的文件存放位置等等。如果你是按着默认的规则来的,那么构建脚本将会很简单。当然,如果项目结构不一样,也可以自己指定这些规则。这里暂不介绍,只说一下基本的用法。

1. 使用Java插件

只需要要构建脚本中添加以下代码:

  1. apply plugin: 'java'

定义一个Java项目只需要添加这么一句代码,它会为你添加Java插件,以及一些内置任务。

默认情况下,Gradle会在src/main/java中查找你的源码,在src/test/java中查找你的测试代码,而src/main
/resources下的文件都会被打包,src/test/resources下的文件会被包含在classpath中用于测试。所有输出的文件都保存
在build目录里,而生成的jar包则是在build/libs里面。

2. 构建项目

Java插件帮你定义了许多任务,这个可以通过前面说的gradle tasks命令来看。当执行gradle build 时,Gradle会执行编译,测试,并且将源文件和资源文件打成jar包。

除了build之外,还有几个常用的任务,如下:

clean:删除build目录和其他构建时生成的文件。

assemble:编译并打包,但不执行单元测试。不过一些其他插件可能会增强这个任务,例如 War 插件会再打出war包。

check:编译并测试代码。其他插件可能会增强这个任务。比如 Code-quality 插件会让这个任务去执行Checkstyle。

3. 外部依赖

通常一个项目会有许多外部依赖,我们需要在构建脚本中告诉Gradle在哪里可以找到这些依赖。比如如果使用maven中央仓库的话,我们可以通过以下代码来添加仓库:
  1. repositories {
  2. mavenCentral()
  3. }

然后再通过下面代码添加依赖:

  1. dependencies {
  2. compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
  3. testCompile group: 'junit', name: 'junit', version: '4.+'
  4. }

上面的代码中,声明了在编译期,需要依赖 commons-collections,在测试期需要依赖 junit。

关于依赖的内容,下一篇会有更详细的笔记。

4. 自定义项目

前面提到,Java插件为项目定义了许多默认配置,如果我们需要,这些配置都是可以由我们自己来定义的。如下面例子,指定项目版本号和JDK版本号,并且添加一些属性到JAR包的manifest文件中:
  1. sourceCompatibility = 1.5
  2. version = '1.0'
  3. jar {
  4. manifest {
  5. attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
  6. }
  7. }

Java插件添加的都是普通任务,所以前面一章介绍的Gradle机制也可以用在这里,比如修改任务的依赖,添加任务行为,甚至重写某个任务等等。下面的例子是修改test任务来添加系统属性:

  1. test {
  2. systemProperties 'property': 'value'
  3. }

5. 发布JAR包

以下代码是发布JAR包到本地中。发布到maven仓库或jcenter仓库以后再讨论。

  1. uploadArchives {
  2. repositories {
  3. flatDir {
  4. dirs 'repos'
  5. }
  6. }
  7. }

执行gradle uploadArchives即可发布该JAR包。

6. 创建Eclipse项目

如果想把项目导入到eclipse当中,需要使用一个Eclipse插件:
  1. apply plugin: 'eclipse'

执行gradle eclipse会生成eclipse项目文件,关于此插件以后再细说。

7. 小结

下面是一个完整的Java项目构建脚本:
  1. apply plugin: 'java'
  2. apply plugin: 'eclipse'
  3. sourceCompatibility = 1.5
  4. version = '1.0'
  5. jar {
  6. manifest {
  7. attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
  8. }
  9. }
  10. repositories {
  11. mavenCentral()
  12. }
  13. dependencies {
  14. compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
  15. testCompile group: 'junit', name: 'junit', version: '4.+'
  16. }
  17. test {
  18. systemProperties 'property': 'value'
  19. }
  20. uploadArchives {
  21. repositories {
  22. flatDir {
  23. dirs 'repos'
  24. }
  25. }
  26. }

8. 多项目构建

项目结构:
  1. multiproject/
  2. api/
  3. services/webservice/
  4. shared/

首先需要创建一个settings.gradle的配置文件,来声明构建要包含哪些项目。文件的内容如下:

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

多项目构建,以后会详谈。

9. 公共配置

对多项目构建当中,会有一些配置是共同的。Gradle会在根项目上采用一种叫配置注入的方式定义一些公共配置。所以在这种情况下,可以把这些公共配置定义在根项目的配置文件里,子项目的配置文件会迭代这些配置并注入到自己的配置中。
下面是示例代码:
  1. subprojects {
  2. apply plugin: 'java'
  3. apply plugin: 'eclipse-wtp'
  4. repositories {
  5. mavenCentral()
  6. }
  7. dependencies {
  8. testCompile 'junit:junit:4.11'
  9. }
  10. version = '1.0'
  11. jar {
  12. manifest.attributes provider: 'gradle'
  13. }
  14. }

上面的配置就会子项目都应用了java和eclipse-wtp插件,声明了maven中央仓库,添加了测试期的依赖junit,以及定义了项目版本包和打成的jar包里的manifest文件的属性。

10. 项目依赖

同一个构建中的项目可以建立项目依赖。比如api子项目要依赖share子项目生成的jar包,那么在api子项目的构建脚本中可以使用以下代码:
  1. dependencies {
  2. compile project(':shared')
  3. }

11. 多项目的打包发布

  1. task dist(type: Zip) {
  2. dependsOn spiJar
  3. from 'src/dist'
  4. into('libs') {
  5. from spiJar.archivePath
  6. from configurations.runtime
  7. }
  8. }
  9. artifacts {
  10. archives dist
  11. }

这段代码我还没能理解。先记着。

下篇将是Gradle依赖管理基础的笔记。
本系列博客为Gradle 用户手册的笔记。本文是Gradle 1.2的第七章Java构建快速入门的笔记,博客中的代码均来源于此文档。

本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/40656311

004_Gradle 笔记——Java构建入门的更多相关文章

  1. Gradle 笔记——Java构建入门

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

  2. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  3. 自学 Java 怎么入门

    自学 Java 怎么入门? 595赞同反对,不会显示你的姓名     给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...

  4. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  5. java加密算法入门(二)-对称加密详解

    1.简单介绍 什么是对称加密算法? 对称加密算法即,加密和解密使用相同密钥的算法. 优缺点: 优点:算法公开.计算量小.加密速度快.加密效率高. 缺点: (1)交易双方都使用同样钥匙,安全性得不到保证 ...

  6. Java快速入门-02-基础篇

    Java快速入门-02-基础篇 上一篇应该已经让0基础的人对 Java 有了一些了解,接一篇更进一步 使用 Eclipse 快捷键 这个老师一般都经常提,但是自己不容易记住,慢慢熟练 快捷键 快捷键作 ...

  7. Java快速入门-01-基础篇

    Java快速入门-01-基础篇 如果基础不好或者想学的很细,请参看:菜鸟教程-JAVA 本笔记适合快速学习,文章后面也会包含一些常见面试问题,记住快捷键操作,一些内容我就不转载了,直接附上链接,嘻嘻 ...

  8. java秀发入门到优雅秃头路线导航【教学视频+博客+书籍整理】

    目录 一.Java基础 二.关于JavaWeb基础 三.关于数据库 四.关于ssm框架 五.关于数据结构与算法 六.关于开发工具idea 七.关于项目管理工具Mawen.Git.SVN.Gradle. ...

  9. java虚拟机入门(一)-jvm基础

    转行学java之前,总是听着大佬们说着java像个渣男一样可以跨平台,一次编译到处运行,瞬间,我就坚定了学java的信念,哎呀妈呀,得劲.真的学java之后,好像渣男也不是那么好学的,尤其这货的必杀技 ...

随机推荐

  1. 【loj2319】[NOIP2017]列队 Splay(卡过)

    题目描述 给出一个 $n\times m$ 的矩阵,第 $i$ 行第 $j$ 列的数为 $(i-1)\times m+j$ . 现在有 $q$ 次操作,每次操作给出位置 $(x,y)$ ,取出 $(x ...

  2. Linux进入单用户模式(passwd root修改密码)

    进入单用户模式——passwd root修改密码 1.在grub 页面输入a,进入修改内核模式 2.在内核的结尾“/”,输入空格,在输入single,回车 3.启动系统,进入单用户模式 4.Passw ...

  3. What Is The Promiscuous Mode

    What Is The Promiscuous Mode? Some Network Interface Cards (NICs) may not allow network traffic afte ...

  4. 【Codeforces 98E】 Help Shrek and Donkey 游戏策略神题

    from http://www.cnblogs.com/MashiroSky/p/6576398.html A君有n张牌,B君有m张牌,桌上还有一张反扣着的牌,每张牌都不一样. 每个回合可以做两件事中 ...

  5. POJ.3279 Fliptile (搜索+二进制枚举+开关问题)

    POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...

  6. C++中Vector求最大值最小值

    vector<int> v: 最大值: int max = *max_element(v.begin(),v.end()); 最小值: int min = *min_element(v.b ...

  7. openssl生成https证书、转换证书格式的各种相关操作

    第一步:生成 private key.csr等文件 我们可能需要输入以下信息(交互式): --- Country Name (2 letter code) [AU]:US State or Provi ...

  8. 效应量Effect Size

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  9. nova-conductor与AMQP(一)

    源码版本:H版 一.AMQP基础 1. 什么是AMQP 可以参考如下文章: http://blog.csdn.net/linvo/article/details/5750987 http://blog ...

  10. mysql 查询小demo

    两张表的的结构如下,需求是写出从one表到two表和从two表到one表的查询转换. create table student_one( name varchar(50) default '' not ...