第7章java快速开始

7.1java插件

我们知道,Gradle是一个多用途的构建工具,它可以构建你想在构建脚本中实现的任何事情。不过,作为开箱即用的产品,它不会做任何构建脚本不包含的任务。

大多数Java项目都和基础项目很相似:你需要编译java源文件,执行一些单元测试,创建一个包含你的classes的JAR文件。如果你没有必要为每一个这种项目都编写构建脚本的话,那会是很好的。幸运的是,你确实没有必要这么做。Gradle通过使用插件来解决这个问题,插件对Gradle来说是一种扩展,它以某些方式来配置你的项目,典型地是添加一些预先配置的任务去做一些有用的事情。Gradle本身包含了很多插件,并且你可以很容易地编写你自己的插件,并将其和他人分享。这样的一个插件就是Java插件,这个插件给你的项目添加一些任务,它会编译和测试你的Java源代码,并将之打包为JAR文件输出。

Java插件是基于惯例的。这意味着,插件为项目的某些方面定义了默认值,例如从何处加载Java源文件。如果你在你的项目中遵守惯例,一般地,你不需要在你的构建脚本中做太多事情就可以获得一个有用的构建。如果你不希望或者在某些情况下不能遵守惯例,Gradle允许你自定义你的项目配置惯例。事实上,因为对Java项目的支持就是通过插件来实现的,因此你完全可以不使用插件来构建Java项目,如果你确实不想要那么做的话。

在之后的章节中,我们用了一些例子来深层次的覆盖了关于Java插件,依赖管理和多项目构建的内容。在本章节,我们想要给你一个如何使用Java插件构建项目的初步认识。

7.2一个基础的Java项目

让我们来看一个简单的例子。为了使用Java插件,将下面的代码加入到你的构建文件中。

例子7.1使用Java插件

build.gradle

apply plugin: 'java'

注意:该例子的代码可以在gradle的binary和source的发布包中samples/java/quickstart目录下找到。

以上就是定义一个Java项目所需要做的,这会为你的项目添加Java插件,Java插件会为你的项目增加很多任务。

Gralde期望在src/main/java目录下找到你项目的源代码,在src/test/java中找到你的测试代码,此外src/main/resources中的任何文件都会作为资源包含到JAR文件中,src/test/resources中的任何文件都会包含到classpath中,用来执行测试。输出文件都会放到build目录下,JAR文件会放到build/libs目录下。

7.2.1构建项目

Java插件给你的项目增加了很多任务,但是这只不过是你构建项目所需任务中的一小部分。

最常用的任务是build任务,它会对项目进行完整的构建。当你运行gradle build,Gradle会编译和测试你的代码,继而创建一个包含classes和resources的JAR文件。

例子7.2构建Java项目

gradle build的输出:

> gradle build

:compileJava

:processResources

:classes

:jar

:assemble

:compileTestJava

:processTestResources

:testClasses

:test

:check

:build

BUILD SUCCESSFUL

Total time: 1 secs

其他一些有用的任务:

clean

删除build目录,移除构建过程中的所有输出文件

assemble

编译并将代码打成JAR包,但是不执行单元测试。其他插件为该任务添加更多的特性。举个例子,如果你使用War插件,该任务也会为你的项目构建WAR文件。

check

编译和测试你的代码,其他插件为该任务添加更多的检查。例如,如果你使用checkstyle插件,该任务也会在的源代码上运行Checkstyle。

7.2.2外部依赖

通常,一个Java项目会依赖一些外部的JAR文件,你需要告诉Gradle在哪里寻找这些文件,从而在你的项目中引用这些文件。在Gradle中,像JAR文件这类的资源都会放在一个资源库(repository)中。资源库可以用来查找项目依赖,或者发布项目资源。下面的例子中,我们将使用Maven资源库:

例子7.3添加Maven资源库

build.gradle

repositories {

mavenCentral()

}

接着来添加一些依赖吧。这里,我们会申明,production classes在编译期依赖commons collections,test classes在编译期依赖junit。

例子7.4添加依赖

build.gradle

dependencies {

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

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

}

你可以在第8章找到更多关于依赖方面的知识。

7.2.3定制项目

Java插件会给你的项目添加了一些属性,这些属性都有默认值,通常这些默认值足以启动项目了。如果这些默认值不合适,改变这些值也是很容易的。来看下一下面这个例子,这里我们为Java项目指定了版本号,跟着指定了编写代码使用的Java版本,同时我们也为JAR描述 清单(manifest)添加了一些属性。

例子7.5自定义的MANIFEST.MF

build.gradle

sourceCompatibility = 1.5

version = '1.0'

jar {

manifest {

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

}

}

Java插件添加的任务也是规则的任务,他与在build文件中定义的任务是一样的,这意味这你可以使用在任何在先前章节中所展示的机制来定制这些任务。例如,可以设置任务的属性,为任务添加行为,改变任务的依赖性,完整地替换任务。在下面的例子中,我们将会配置test任务,其类型是Test,然后在tests任务执行的时候增加一个系统属性。

例子7.6添加测试系统属性

build.gradle

test {

systemProperties 'property': 'value'

}

7.2.4发布JAR文件

通常,JAR文件需要在某处发布。当发布JAR文件时,你需要告诉Gradle将JAR文件发布到何处。在Gradle中,JAR文件会被发布到资源库中。在下面的例子中,我们将其发布到本地的一个目录,你也可以将其发布到远程位置,或多个位置。

Example 7.7. 发布JAR文件

build.gradle

uploadArchives {

repositories {

flatDir {

dirs 'repos'

}

}

}

执行gradle uploadArchives来发布JAR文件。

7.2.5创建Eclipse项目

为了将你的项目导入到Eclipse,你需要在build文件中添加另一个插件:

例子7.8Eclipse插件

build.gradle

apply plugin: 'eclipse'

现在,执行gradle eclipse命令生成Eclipse项目文件,更多关于Eclipse任务的内容,请参考38章节。

7.2.6总结

这里是例子的完整的构建文件

例子7.9Java例子-完整的构建文件

build.gradle

apply plugin: 'java'

apply plugin: 'eclipse'

sourceCompatibility = 1.5

version = '1.0'

jar {

manifest {

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

}

}

repositories {

mavenCentral()

}

dependencies {

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

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

}

test {

systemProperties 'property': 'value'

}

uploadArchives {

repositories {

flatDir {

dirs 'repos'

}

}

}

7.3多项目Java构建

现在看一个典型的多项目构建。下面是项目的布局:

例子7.10多项目构建-分层布局

Build layout

multiproject/

api/

services/webservice/

shared/

注:本例子的代码可以在Gradle的binary和source的发布包中的samples/java/multiproject目录下。

这里我们有三个项目,项目api生成一个为客户端提供访问xml webservice的Java客户端的JAR文件,项目webservice是一个返回XML的web app,项目share包含项目api和项目webservice所使用的代码。

7.3.1定义多项目构建

为了定义多项目构建,你需要创建一个settings文件,该文件在代码的根目录,指定了哪些项目需要引入到构建中,该文件必须为settings.gradle。在下面的这个例子中,我们使用了一个简单的分层布局,下面是相应的settings文件:

例子7.11多项目构建-settings.gradle文件

settings.gradle

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

在第56章中你可以找到更多关于settings.gradle文件的内容。

7.3.2共通配置

对于大多数项目,有一些配置是所有项目通用的。在例子中,在根项目定义了共通配置,使用了一个叫做配置注入(configuration injection)的技术。这里,根项目就像一个容器,subprojects 方法迭代容器中的元素(项目),并给它们注入配置。这样,我们很容易为所有的项目定义描述清单的内容,以及一些共通的依赖。

例子7.12多项目构建-共通配置

build.gradle

subprojects {

apply plugin: 'java'

apply plugin: 'eclipse-wtp'

repositories {

mavenCentral()

}

dependencies {

testCompile 'junit:junit:4.11'

}

version = '1.0'

jar {

manifest.attributes provider: 'gradle'

}

}

注意,咱们在例子中给每一个子项目都应用了Java插件,这意味着,在先前章节所看到的任务和配置属性都适用于每一个子项目,所以你可以在根项目目录执行gradle build 来编译、测试这些项目,以及将它们输出为JAR包。

7.3.3项目间依赖

同一个构建中,可以在项目之间添加依赖,这样,一个项目的JAR文件可以用来编译另一个项目。我们在api目录下的构建文件中添加对由共享项目生成的JAR的依赖,因为这个依赖关系,Gradle会保证共享项目总会在api项目之前被构建出来。

例子7.13多项目构建-项目间依赖

api/build.gradle

dependencies {

compile project(':shared')

}

在56.7.1节,会看到“取消依赖“的功能。

7.3.4创建发布

我们也可以添加一个发布包,打包给客户端用。

例子7.14多项目构建-发布文件

api/build.gradle

task dist(type: Zip) {

dependsOn spiJar

from 'src/dist'

into('libs') {

from spiJar.archivePath

from configurations.runtime

}

}

artifacts {

archives dist

}

java代码中何处以main开始,Gradle-user guide-第7章 Java 快速开始相关推荐

  1. java代码中何处以main开始_自测题: Java 基础

    1.19 自测题: 什么是字节码?它对Java的Internet程序设计为何十分重要? 字节码是一种高度优化的指令集,由Java虚拟机执行,可帮助Java获得可移植性和安全性 面向对象程序设计的三个主 ...

  2. 如何在java代码中读取配置文件

    在日常开发过程中,我们经常需要拼接一些字符串之类的东西,而这些字符串往往是不变的,或者在java代码中多次使用到的.当然我们可以在java代码中写死,但是这样做的缺点也是有目共睹的,一旦业务需求发生变 ...

  3. 你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:Mr.ml https://blog.csdn.net/Ma ...

  4. idea自动生成get set_CTO:不要在Java代码中写set/get方法了,逮一次罚款

    前言 what?你的 Java 代码中还充斥着大量的 set/get 方法? 我们在刚开始学习 Java 语言的时候讲过,面向对象的三大特征就是封装,继承,和多态.在 Java 中,要保证封装性,需要 ...

  5. java中getup用法_你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!

    前言 what?你的 Java 代码中还充斥着大量的 set/get 方法? 我们在刚开始学习 Java 语言的时候讲过,面向对象的三大特征就是封装,继承,和多态.在 Java 中,要保证封装性,需要 ...

  6. 删除 java代码中所有的注释

    删除 java代码中所有的注释.java public class CleanCommons {private static Pattern pattern = Pattern.compile(&qu ...

  7. java错放了构造_在catch代码附近的Java代码中“错放了构造”(“misplaced construct(s)” in Java code near a catch)...

    在catch代码附近的Java代码中"错放了构造"("misplaced construct(s)" in Java code near a catch) 我无 ...

  8. java 导出答题卡_试题六(共15分) 阅读以下说明、图和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的对 - 赏学吧...

    试题六(共15分) 阅读以下说明.图和Java代码,填补Java代码中的空缺(1)-(6),将解答写在答题纸的 对应栏内. [说明] 已知对某几何图形绘制工具进行类建模的结果如图6.1所示,其中Sha ...

  9. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

最新文章

  1. 某厂:有微服务经验者优先!
  2. 仿麦包包首页table轮换图jQuery(转自www.jqueryba.com)
  3. 我在学python-我慌了,周围人都在学python...
  4. Trunk Club:颠覆男士时装零售的创业公司_第1页_福布斯中文网
  5. 算法:程序设计之并查集
  6. C++ 静态线性表的顺序存储结构(数组实现)
  7. 危机时刻,我们需要多少个“冷锋”?
  8. 可近似看作直线的是_高中物理题根之一:《匀变速直线运动的规律》
  9. 一、SecureCRT 8.0 客户端连接服务器
  10. java基础练习实例_java基础练习题百度云.doc
  11. 计算机键盘上的每一个按键应用,电脑键盘按键都代表着什么意思?
  12. 彻底搞清楚 dB 和 dBm
  13. 暴力破解压缩包原理及方法
  14. python xgboost建模过程_机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义...
  15. 建筑物防雷接地工程的分类和措施
  16. 我看考研(一)——为什么考研之考研的理由的重要性
  17. random模块——随机数常用函数介绍
  18. 【AtCoder】ARC074
  19. 轴承轮廓测量解决方案
  20. 理解Javascript的正则表达式

热门文章

  1. [转载]逐步建设企业DevOps能力
  2. mybatis数据批量插入
  3. 点击空白 键盘消失 (待续……)
  4. NSNotificationCenter
  5. 探索Java语言与JVM中的Lambda表达式
  6. (转)PHP框架大比武
  7. V神建议使用BCH区块链用于以太坊“数据层”
  8. CashTippr:比特币现金MoneyButton打赏插件
  9. BCH将于9月1日进行压力测试
  10. Logback日志跨线程追踪实践