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. Oracle中三种循环(For、While、Loop)案例

    1.ORACLE中的FOR循环用法(九九乘法表) declare i ; j ; begin .. loop ..i loop Dbms_Output.put(i||'*'||j||'='||i*j) ...

  2. (转)解决点击a标签返回页面顶部的问题

    本文转载至http://www.cnblogs.com/chenluomenggongzi/p/5950670.html 1 <!DOCTYPE html> 2 <html lang ...

  3. BZOJ3743 COCI2015Kamp(树形dp)

    设f[i]为由i开始遍历完子树内所要求的点的最短时间,g[i]为由i开始遍历完子树内所要求的点最后回到i的最短时间.则g[i]=Σ(g[j]+2),f[i]=min{g[i]-g[j]+f[j]-1} ...

  4. Elasticsearch之基本操作

    elasticsearch是一个是开源的(Apache2协议),分布式的,RESTful的,构建在Apache Lucene之上的的搜索引擎. 它有很多特点例如Schema Free,Document ...

  5. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)

    A 模拟 B 发现对于每个连通块,只有为完全图才成立,然后就dfs C 构造 想了20分钟才会,一开始想偏了,以为要利用相邻NO YES的关系再枚举,其实不难.. 考虑对于顺序枚举每一个NO/YES, ...

  6. 基于Memcached分布式系统DRDoS拒绝服务攻击技术研究(转)

    本次反射式拒绝服务攻击技术基于全球互联网分布式的Memcached服务器,需要储备一定得安全攻防知识,网络协议知识和python代码编程技术.希望在学习本篇文章知识前自行学习相关的基础知识,文章后面同 ...

  7. Java考试题

    1.     public class GC { 2.     private Object o; 3.     private voiddoSomethingElse(Object obj) { o ...

  8. (转)C#中“EQUALS”与“==”的速度比较

    结论: true判断时,用"value" == string是最快的:false判断时,用"value".Equals(string)是最快的. 也就是说:一个 ...

  9. Struts2-从值栈中获取数据-EL表达式从值栈获取

    从值栈获取数据 1 使用struts2的标签+ognl表达式获取值栈数据 (1)<s:property value=”ognl表达式”/> 获取字符串

  10. spring boot 2.0.3+spring cloud (Finchley)5、路由网关Spring Cloud Zuul

    Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由.过滤.监控.弹性伸缩和安全. 为什么需要Zuul Zuul.Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能:网关将 ...