首页 > 学院 > 开发设计 > 正文

Gradle 快速入门

2019-11-11 06:39:45
字体:
来源:转载
供稿:网友

大家应该都经历过为了学习Hibernate、SPRing这样的框架,需要引用大量Jar包而忙得焦头烂额的经历吧。在java中管理Jar包确实是一件麻烦事情。而且有时候就算你电脑上一个项目配置的好好的,换一台电脑马上就不行了。因此就产生了项目构建工具这么一个玩意,它能大大简化我们构建项目所需的成本。Maven就是这么一个项目构建工具,它的配置文件是一个xml文件。这样做的优点就是配置易于理解,因为是XML嘛。但是如果项目很大很复杂,那么Maven的局限性就体现出来了:XML会变得非常非常长,不利于阅读;使用插件、执行某些任务非常困难,因为XML擅长描述静态信息,对动态的行为无能为力。因此催生了一个崭新的项目构建工具Gradle。用了一段时间Gradle的我表示再也回不去Maven了。真的各方面体验都非常好。Gradle的唯一缺点大概就是网络不甚流畅,可能需要梯子等工具。

安装Gradle

我们可以到Gradle官方网站上下载Gradle。Gradle的文档也在上面,虽然是英文的,但是我推荐大家还是有时间尽量看一看。对提高Gradle技能很有帮助。下载版本有两个,完整版(包括可执行文件、文档和源代码)以及二进制版(只有可执行文件)。我推荐下载完整版的,因为有源代码的支持,在Intellij IDEA这样的智能IDE会提供Gradle脚本补全这样的高级功能。下载完成之后将Gradle bin目录添加到环境变量中。新开一个命令提示符执行如下命令,

gradle --version

如果得到类似的输出,那么就说明安装成功了。

------------------------------------------------------------Gradle 3.3------------------------------------------------------------Build time: 2017-01-03 15:31:04 UTCRevision: 075893a3d0798c0c1f322899b41ceca82e4e134bGroovy: 2.4.7Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015JVM: 1.8.0_112 (Oracle Corporation 25.112-b15)OS: Windows 10 10.0 amd64

Gradle默认情况下会使用当前系统的编码来处理文件。也就是说在我们中文Windows操作系统下,会使用GBK编码。如果我们的项目使用UTF-8编码,在使用Gradle的过程中就会出现乱码情况。解决办法可以参考我这篇文章Gradle项目中文乱码的解决办法。

基本使用

新建项目

随便新建一个文件夹,打开命令提示符,切进这个文件夹。然后执行

gradle init

这样Gradle就会为我们初始化必要的文件。文件列表如图。.gradle是Gradle的临时文件夹,不用管。gradle文件夹、gradlewgradlew.bat是Gradle Wrapper用到的文件,我们现在也不用管。需要关注的就是build.gradlesettings.gradle两个文件。

Gradle新建项目结构

对于一个完整的Gradle项目来说结构应该和下图一样。除了上图初始化之后的几个文件之外,还应该有以下文件夹。

src/main/java,java源代码文件夹src/main/resources,资源文件夹src/main/webapp,网络内容文件夹(如果这是个web项目)src/test/java,测试文件夹src/test/resources,测试资源文件夹

Gradle完整项目结构

配置文件

settings.gradle文件是Gradle项目的配置文件,我们可以在这里配置项目的一些信息,例如项目名称等等。以下是一个简单的settings.gradle内容。

rootProject.name = 'spring-web-mvc-sample'

如果是一个多项目的Gradle项目,那么settings.gradle还会包含一些include行,指定包含了哪些项目。

include 'shared'include 'api'include 'services:webservice'

构建文件

下面来说说构建文件build.gradle,这是我们主要配置的地方。下面是一个典型的build.gradle文件。每个部分的作用我都注释出来了。习惯了XML文件的同学一定觉得这种文件很特别。Gradle是基于Groovy语言的,所以这里的文件其实就是Groovy形式的代码文件。如果不会Groovy语言也不要紧,使用Gradle插件就可以满足我们大部分的需求。当然如果懂Groovy语言,那么就可以编写复杂的自定义任务了。

// 项目配置group 'yitian.learn'version '1.0-SNAPSHOT'// 插件配置apply plugin: 'java'apply plugin: 'war'apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'// 源代码兼容性sourceCompatibility = 1.8// 仓库配置repositories { jcenter()}// 额外的变量配置ext { springVersion = '4.3.6.RELEASE' thymeleafVersion = '3.0.0.RELEASE'}//依赖配置dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile group: 'org.springframework', name: 'spring-webmvc', version: springVersion}

下面来根据注释分别说说。首先是项目配置,配置该项目的组名(一般是公司或组织名)和版本号,和Maven中的组名、项目名和版本号一一对应(Gradle项目的项目名在settings.gradle中)。源代码兼容性指的是项目中源代码的版本。对于我来说肯定永远是最新版的Java了。剩下几个有点复杂,在后面慢慢讨论。

配置项目

执行任务

首先我们执行一下命令gradle tasks。会发现列出了Gradle当前所有可用的任务,而且我们会发现有个任务就是tasks在Gradle中,任务是最基本的执行单元。而且我们这些Gradle命令行其实就是执行一些Gradle命令。每个任务还应该有一个组名,表明任务的类别,没有组名的任务Gradle默认会将其隐藏。我们使用gradle tasks列出任务的时候Gradle也会将其以组名分类。要执行某个任务,语法如下:gradle 任务名

如果有使用过Maven的同学,可以感受到Gradle执行任务比Maven执行命令方便多了。如果项目还是刚刚那个刚新建好什么都没改的构建文件。那么查看任务的时候应该只能看到初始化和帮助任务。Gradle其他的功能需要插件来提供。

插件

上面那个配置文件给出了插件的配置方法。第一种是使用Gradle提供的一些插件,第二种是引用网络上的插件。配置了插件之后,我们再次查看任务,就会发现多出来很多任务,这就是插件带给我们的功能。

如果我们这是个Java项目,那就添加java插件,如果这是一个Java Web项目,那么还需要添加war插件。如果想要运行该web项目,可以使用Gradle提供的jetty插件。但是这个插件在Gradle3.3中已经过时了,Gradle推荐我们使用功能更加强大的Gretty插件。针对其他语言和平台,Gradle也提供了相应的插件例如android,这些插件的情况参见其相应的文档。

apply plugin: 'java'apply plugin: 'war'apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'

java和war插件给我们提供了很多新的任务,方便我们开发。列举一些常用的如下:

任务名 作用
build 打包和测试项目
test 测试项目
assemble 打包项目
war 打包成war文件
jar 打包成jar文件
clean 清理项目
javadoc 生成javadoc

Gretty插件最常用的就是tomcatRun任务了。它会启动一个tomcat实例来运行我们的应用,而且具有自动更新类、资源,必要时重启服务器的功能,非常方便和强大。Gretty插件的详细配置参见其Github。

仓库配置

Gradle默认提供了两个公共仓库,mavenCentral和jcenter。我们可以随意使用。当然也可以同时引用多个。这种情况下Gradle会依次按照顺序来搜索软件包,如果都没找到则构建失败。当然我们也可以使用其他镜像仓库。下面的例子使用了阿里的镜像仓库,如果镜像仓库没找到需要的软件就会继续在jcenter中寻找。

repositories { maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } jcenter()}

依赖配置

Gradle的依赖配置和Maven兼容。所以Gradle的依赖项也由三个部分,组名,项目名和版本组成。所以一个依赖项可以写成这样。

compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'

依赖项还可以按照group:name:version形式简写,所以上面的依赖项可以缩成这样。

compile 'org.hibernate:hibernate-core:3.6.7.Final'

和Maven一样,Gradle依赖项也支持作用域,这在依赖项前面的动词上体现出来。常见的几个作用域如下。

名称 作用
compile 在项目编译时需要
runtime 在运行时需要,默认情况下也包括编译时依赖
testCompile 在测试代码编译时需要
testRuntime 在测试代码运行时需要,默认情况下也包括编译时依赖、运行时依赖和测试编译时依赖

查找依赖项的时候推荐到mvnrepository.com上查找,这个网站同时提供了Maven和Gradle等多种形式的依赖项,非常方便。

定义变量

有时候可能需要在某处定义一个变量,然后在其余多处地方使用这个变量。在Gradle中需要在ext块中定义变量,然后就可以在其他地方使用了。

// 额外的变量配置ext { springVersion = '4.3.6.RELEASE'}//依赖配置dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile group: 'org.springframework', name: 'spring-webmvc', version: springVersion}

进阶使用

Gradle Wrapper

现在可以说一说gradle/wrapper文件夹、gradlewgradlew.bat了。这几个文件是Gradle Wrapper的文件。Gradle Wrapper能够让没有安装Gradle的电脑运行Gradle项目。原理很简单,通过一个脚本文件实现,如果当前没有安装某个版本的Gradle,脚本会自动下载解压。完成之后,当我们通过gradlew命令运行Gradle的时候,脚本会将命令参数传递给实际的gradle命令。Gradle Wrapper的使用方法和Gradle一样,只不过把gradle换成了gradlew

gradle/wrapper文件夹对Gradle Wrapper来说很重要,该文件夹下的两个文件gradle-wrapper.jargradle-wrapper.properties缺一不可,假如要上传到源代码管理这两个文件也同样需要上传。在gradle-wrapper.properties中我们可以配置Gradle Wrapper的一些属性。重点是最后一行,为了使用最新和最完整的Gradle功能,我们一般要修改它为gradle-3.3-all.zip(3.3是当前最新的Gradle版本号)。

distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distsdistributionUrl=https/://services.gradle.org/distributions/gradle-3.3-all.zip

IDE集成

如果使用Eclipse或者STS这样基于Eclipse的IDE,点击帮助->软件市场,搜索BuildShip插件,安装然后重启Eclipse,然后就可以在新建项目的时候看到Gradle了。

如果使用Intellij IDEA,由于它自带了Gradle支持。所以直接可以在新建项目的时候选择Gradle项目,然后根据提示操作。对于Gradle项目来说推荐的IDE还是Intellij IDEA,因为对Gradle的支持最好。

IDEA Gradle插件


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表