2019独角兽企业重金招聘Python工程师标准>>>
流程的 Java 项目构建工具之一。Ant、Maven 的继任者。
Gradle 有什么特色业界有很多款流行的项目构建工具。Gradle 有哪些优点?
学习门槛低:
使用方法法和 Ant, Maven 近似。很好的支持 Java 的编译、测试、打包发布等项目构建工作。兼容 Maven 的程序库。
配置简洁:
基于 Groovy 动态语言的配置文件,配置比 XML 简洁很多。Groovy 语言,是一种近似 Python、Ruby 的脚本解释语言。
插件众多:
可以通过插件来扩展功能。
1. 下载和解压文件
$ wget --no-check-certificate https://services.gradle.org/distributions/gradle-1.12-all.zip
$ unzip gradle-1.12-all.zip -d $HOME/opt
2. 在 Bash 配置中增加路径配置
编辑 ~/.bash_profile 文件,增加下面的语句。
GRADLE_HOME=$HOME/opt/gradle-1.12PATH=$GRADLE_HOME/bin:$PATHexport PATH
3. 验证生效
$ source ~/.bash_profile
$ gradle -v
如果看到如下信息,则安装成功。
------------------------------------------------------------
Gradle 1.12
------------------------------------------------------------Build time: 2014-04-29 09:24:31 UTC
Build number: none
Revision: a831fa866d46cbee94e61a09af15f9dd95987421Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
Ivy: 2.2.0
JVM: 1.6.0_32 (Sun Microsystems Inc. 20.0-b12-internal)
OS: Linux 2.6.18-164.el5 amd64
如果出现异常,可能需要检查下Java是否已安装,或者是否可以正常使用。
用 Gradle 管理项目创建一个最简单的 Java 项目。
一般情况下,代码树结构如下:
$ mkdir demo
$ cd demo
$ mkdir -p src/main/java src/main/resources src/test/java src/test/resources
$ vim src/main/java/Main.java
Main.java 的内容
public class Main {public static void main(String args[]) {System.out.println("Hello world!");}}
在项目的根目录下,新建 Gradle 的构建配置文件 build.gradle
加入最简单的构建配置:
apply plugin: 'java'
然后执行
$ gradle build
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:buildBUILD SUCCESSFULTotal time: 4.371 secs
出现上面的提示,说明源代码编译成功
$ tree build
build|-- classes | `-- main | `-- Main.class|-- dependency-cache|-- libs | `-- demo.jar`-- tmp `-- jar`-- MANIFEST.MF
可以看到 Main.class 文件和 jar 文件都在 build 目录下生成了。
怎么添加依赖关系?比如常用的,我需要使用 log4j2 来打印日志
将 Main.java 的代码改为以下内容
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger; public class Main {private static final Logger LOG = LogManager.getLogger(Main.class); public static void main(String args[]) {LOG.info("test log");LOG.error("error message");LOG.warn("warning message");System.out.println("Hello world!");}}
这时在执行 gradle build 就会报 BUILD FAILED
需要在 build.gradle 中加入依赖关系,在其中增加下面的配置
repositories {mavenCentral()}
dependencies {compile 'org.apache.logging.log4j:log4j-api:2.0-rc1'runtime 'org.apache.logging.log4j:log4j-core:2.0-rc1'}
然后再执行 gradle build
会根据依赖设置,自动下载 log4j 的jar包,然后完成编译。
apply plugin:'application'mainClassName = "org.gradle.sample.Main"
使用命令 gradle run 运行
生成 eclipse 项目文件apply plugin: 'eclipse'
运行 gradle eclipse
然后会自动生成 .project .classpath 等eclipse相关的项目配置文件
mainClassName = 'com.xxx.Main'jar {manifest.attributes("Main-Class": mainClassName)}
打 fat jar
需要用到一个 Gradle 的插件,插件也能通过配置来自动添加。
buildscript {repositories {mavenCentral()} dependencies {classpath 'eu.appsatori:gradle-fatjar-plugin:0.2-rc1'}}
使用 JUnit 单元测试
apply plugin: 'fatjar'
mainClassName = 'com.xxx.Main'
fatJar {classifier 'fat' // We need to add the main class to the manifest, otherwise the JAR won't start.manifest {attributes 'Main-Class': mainClassName } // We have to exclude signature files from the fat JAR, otherwise we'll get invalid signature file digest errors.exclude 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.SF'}
dependencies一节加入 Junit 的依赖关系
repositories {mavenCentral()}
dependencies {testCompile 'junit:junit:[4,)'}
测试命令
$ gradle test
测试失败时,会看到类似如下简要的错误信息。
:testnet.leiqing.input.TestInputReader > testReader1 FAILEDorg.junit.ComparisonFailure at TestInputReader.java:381 test completed, 1 failed
:test FAILED
生成更详细的测试报告,可以用下面的命令
$ gradle test -i
详尽的HTML格式的测试报告会生成在 build/reports/tests 目录下。
设置缺省任务一般来讲运行 gradle 多数时间就是运行 build 任务。
在 build.gradle 中加入下面的配置。
defaultTasks 'clean', 'build'
这样只需要执行
$ gradle
就自动执行 clean 和 build 任务了。
就可以少敲5个字母了。保护手腕,保护键盘。
不废话了,项目地址在 GitHub: vim-gradle
安装方法在 README 上已经说明。
包名:Gradle_Language
快速生成 Gradle 项目创建一个目录,进入目录,然后执行命令:
$ gradle init --type java-library
使用 daemon 加速
在 .bash_profile 中添加
export GRADLE_OPTS="-Dorg.gradle.daemon=true"
自定义源代码目录结构
// 自定义源代码目录结构
自定义 Jar 包文件名
sourceSets.main {java.srcDirs 'src'
}
archivesBaseName = 'your-jar-file-name'
依赖本地目录下的 jar
apply plugin: 'java'
dependencies {compile fileTree(dir: 'libs', include: '*.jar')
}
这样就可以直接依赖 libs 目录下所有的 jar 文件了。