使用gradle构建java项目
- gradle是什么东东
 
gradle是继ant,maven之后另外一种的面向java的自动化项目构建工具,他是基于groovy语言的。相对于ant,maven,gradle显得更加简单。
- 安装gradle
 
gradle从官方网站上下载http://gradle.org/,加压后拷贝到要安装的指定目录下。
- 配置环境变量
 
需要配置GRADLE_HOME路径,同时配置classpath和path两个环境变量
1、在path追加;%GRADLE_HOME%/bin
2、在classpath追加;%GRADLE_HOME%/lib
- eclise中安装gradle插件
 
插件安装地址:http://dist.springsource.com/release/TOOLS/gradle
- 关于gradle免费的ebook
官方网站上提供红宝书的如何使用gradle的ebook,只要输入电子邮箱即可,下面是我提供的ebook下载地址
 - gradle语法
 
1、gradle常用命令语法
/*gradle 帮助命令*/
gradle --help /*gradle 状态查看*/
gradle status /*gradle 构建*/
gradle build /*查看所有任务*/
gradle tasks /*查看项目的属性*/
grade Properties /*查看项目依赖关系*/
gradle dependencies
2、语法解释,创建名为HelloWorld的任务
        task HelloWorld(dependsOn:BeforeHellowWord) << {
            doLast{
                println 'hello, world'
            }
        }
<< 表示追加代码
doLast表示当前代码加到当前任务的前面执行过程
声明依赖关系两种方式
直接在任务中定义dependsOn依赖的任务,或者先声明task,然后再声明依赖关系
HelloWorld.dependsOn BeforeHellowWord
执行以下指令
gradle -q helloWorld
显示结果为hello, world
3、gradle属性定义
#方式一
task taskDescriptionOne << {
description = 'this is task taskDescriptionOne'
println description
} #方式二
task taskDescriptionTwo << {
println description
}
taskDescriptionTwo.description = 'this is task taskDescriptionTwo' #方式三
task taskDescriptionThree << {
println description
} taskDescriptionThree{
description = 'this is task taskDescriptionThree'
}
Gradle都会为每一个task在Project中创建一个同名的Property,我们可以将该Task当作Property来访问,诸如taskDescriptionTwo 。另外,Gradle还会创建一个同名的方法,该方法接受一个闭包,我们可以使用该方法来配置Task,诸如taskDescriptionThree.
- gradle自定义属性
 
gradle默认的属性有以下这些常用的属性
project:Project本身
name:Project的名字
path:Project的绝对路径
description:Project的描述信息
buildDir:Project构建结果存放目录
version:Project的版本号
另外gradle还允许通过以下几种方式自定义属性
1、在build.gradle文件中定义Property
                     在build.gradle文件中向Project添加额外的Property时,我们并不能直接定义,而是应该通过ext来定义。如果要添加一个名为property1的Property,我们应该:
ext.property1 = "this is property1"
通过闭包方式进行自定义属性
           ext {
               property2 = "this is property2"
           }
在定义了Property后,使用这些Property时我们则不需要ext,而是可以直接访问:
           task showProperties << {
                println property1
                println property2
           }
2、通过命令行参数定义Property
                           Gradle还提供了-P命令行参数来设置Property,比如:
              task showCommandLieProperties << {
                   println property3
              }
在执行“gradle showCommandLieProperties”时,终端输出如下:
* What went wrong:
Execution failed for task ':showCommandLieProperties'.
> Could not find property 'property3' on task ':showCommandLieProperties'.
表示property3并没有被定义,在调用gradle命令时,通过-P参数传入该Property:
gradle -P property3="this is property3" showCommandLieProperties
此时终端显示:
:showCommandLieProperties
this is property3
BUILD SUCCESSFUL
3、通过JVM系统参数定义Property
                        在java中,我们可以通过-D参数定义JVM的系统参数,然后在代码中可以可以通过System.getProperty()进行获取。在Gradle中,我们也可以通过-D的方式向Project传入Property,每一个通过-D方式声明的Property都需要以“org.gradle.project”为前缀,对于上面的showCommandLieProperties,我们也可以通过以下方式设置property3:
gradle -Dorg.gradle.project.property3="this is another property3" showCommandLieProperties
4、通过环境变量设置Property
                         我们还可以通过设置环境变量的方式设置Project的Property。在定义环境变量时,每一个Property都需要以“ORG_GRADLE_PROJECT_”为前缀:
export ORG_GRADLE_PROJECT_property3 = "this is yet another property3"
在调用showCommandLieProperties时,我们便不需要传入命令行参数了:
gradle showCommandLieProperties
- gradle定义依赖
 
定义maven依赖
       dependencies {
            compile 'org.slf4j:slf4j-log4j12:1.7.2'
            testCompile 'junit:junit:4.8.2'
       }
定义project依赖
       dependencies {
            compile project(':ProjectB')
       }
对本地文件系统的jar文件依赖
       dependencies {
           compile files('spring-core.jar', 'spring-aap.jar')
           compile fileTree(dir: 'deps', include: '*.jar')
       }
- gradle自定义task类型
 
       class HelloWorldTask extends DefaultTask {
           @Optional
           String message = 'I am davenkin'
           @TaskAction
           def hello(){
               println "hello world $message"
           }
       }
       task hello(type:HelloWorldTask)
       task hello1(type:HelloWorldTask){
           message ="I am a programmer"
       }
- 使用gradle 打包jar
 
cd F:\SvnCodeManage\repository\tomcat-redis-session-manager-master
gradle jar
以上便表示成功,在build\libs 可以找到tomcat-redis-session-manager-master-2.0.0.jar 文件,在build\classes中可以找到.class文件
- 一个完整的gradle.build配置文件
 
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'signing' group = 'com.orangefunction'
version = '2.0.0' repositories {
mavenCentral()
} compileJava {
sourceCompatibility = 1.7
targetCompatibility = 1.7
} dependencies {
compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '7.0.27'
compile group: 'redis.clients', name: 'jedis', version: '2.5.2'
compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.2'
//compile group: 'commons-codec', name: 'commons-codec', version: '1.9' testCompile group: 'junit', name: 'junit', version: '4.+'
testCompile 'org.hamcrest:hamcrest-core:1.3'
testCompile 'org.hamcrest:hamcrest-library:1.3'
testCompile 'org.mockito:mockito-all:1.9.5'
testCompile group: 'org.apache.tomcat', name: 'tomcat-coyote', version: '7.0.27'
} task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from 'build/docs/javadoc'
} task sourcesJar(type: Jar) {
from sourceSets.main.allSource
classifier = 'sources'
} artifacts {
archives jar archives javadocJar
archives sourcesJar
} signing {
sign configurations.archives
} uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } //repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
// authentication(userName: sonatypeUsername, password: sonatypePassword)
//}
//repository(url: "https://oss.sonatype.org/content/repositories/snapshots") {
// authentication(userName: sonatypeUsername, password: sonatypePassword)
//} pom.project {
name 'tomcat-redis-session-manager'
packaging 'jar'
description 'Tomcat Redis Session Manager is a Tomcat extension to store sessions in Redis'
url 'https://github.com/jcoleman/tomcat-redis-session-manager' issueManagement {
url 'https://github.com:jcoleman/tomcat-redis-session-manager/issues'
system 'GitHub Issues'
} scm {
url 'https://github.com:jcoleman/tomcat-redis-session-manager'
connection 'scm:git:git://github.com/jcoleman/tomcat-redis-session-manager.git'
developerConnection 'scm:git:git@github.com:jcoleman/tomcat-redis-session-manager.git'
} licenses {
license {
name 'MIT'
url 'http://opensource.org/licenses/MIT'
distribution 'repo'
}
} developers {
developer {
id 'jcoleman'
name 'James Coleman'
email 'jtc331@gmail.com'
url 'https://github.com/jcoleman'
}
}
}
}
}
}
- 参考资料
 
http://www.cnblogs.com/CloudTeng/p/3422009.html
http://blog.csdn.net/maosidiaoxian/article/details/40340571
http://www.davenkin.me/post/2013-11-12/gradle-first-try
使用gradle构建java项目的更多相关文章
- 使用 Gradle 构建 Java 项目
		
使用 Gradle 构建 Java 项目 这个手册将通过一个简单的 Java 项目向大家介绍如何使用 Gradle 构建 Java 项目. 我们将要做什么? 我们将在这篇文档航中创建一个简单的 Jav ...
 - Gradle构建Java项目
		
前提:已经安装好Gradle 一.创建目录结构 在项目主目录下,创建以下子目录;在*nix系统下可以使用命令: mkdir -p src/main/java/hello vim src/main/ja ...
 - 在gradle中构建java项目
		
目录 简介 构建java项目的两大插件 管理依赖 编译代码 管理resource 打包和发布 生成javadoc 简介 之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为了构 ...
 - Gradle构建Java Web应用(转)
		
转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html 本文是发布在java.net上的一篇摘自于<Gra ...
 - 使用Gradle构建Android项目
		
阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...
 - Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)
		
Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应 ...
 - 使用 Gradle 编译 Java 项目时报错: Could not find Tools.jar
		
在使用Android studio进行编译成jar的时候,遇到Gradle 编译错误,听前辈们说是jdk的版本不对,于是乎就更新了一下jdk, 然而可能是我重新安装jdk的时候改变了安装路径, 在pr ...
 - vscode + gradle 创建 java 项目 - java language server无法启动
		
1.在系统上安装一个版本的gradle,用`gradle init --type java-application`创建一个默认的java项目,假设项目目录是hellojava 2.vscode写ja ...
 - Java-Maven-Runoob:Maven 构建 Java 项目
		
ylbtech-Java-Maven-Runoob:Maven 构建 Java 项目 1.返回顶部 1. Maven 构建 Java 项目 Maven 使用原型 archetype 插件创建项目.要创 ...
 
随机推荐
- 【Uvalive 2531】 The K-League (最大流-类似公平分配问题)
			
[题意] 有n个队伍进行比赛,每场比赛,恰好有一支队伍取胜.一支队伍败.每个队伍需要打的比赛场数相同,给你每个队伍目前已经赢得场数和输得场数,再给你一个矩阵,第 i 行第 j 列 表示队伍 i 和队伍 ...
 - [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
			
一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int.long.float等)的变量,也可以是一些复合数据类型(如 arr ...
 - View以自身中心旋转的代码解惑
			
matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. ...
 - 17.1.1.3 Creating a User for Replication 创建一个用于用于复制:
			
17.1.1.3 Creating a User for Replication 创建一个用于用于复制: 每个slave 连接到master 使用一个MySQL 用户名和密码, 因此必须有一个用户账户 ...
 - BZOJ2295: 【POJ Challenge】我爱你啊
			
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 126 Solved: 90[Submit][Sta ...
 - 【Bower】
			
Bower Bower:客户端库管理工具 Day 1: Bower —— 管理你的客户端依赖关系 bower解决js的依赖管理
 - [PeterDLax著泛函分析习题参考解答]第6章 Hilbert 空间
			
1. 证明满足 (6) 的范数可以由一个内积诱导出来. 这个结论属于 von Neumann. 证明: 以实线性空间为例, 取内积 $$\bex \sex{x,y}=\cfrac{1}{4}[\sen ...
 - Square
			
Square TimeLimit: 1 Second MemoryLimit: 32 Megabyte Totalsubmit: 1638 Accepted: 440 Description ...
 - linux 下的sublime
			
Sublime Text 2 的安装 : 在官方网站下载Linux版本 Or 执行 # wget http://c758482.r82.cf2.rackcdn.com/Sublime%20Tex ...
 - java的好资料总结
			
1jvm的垃圾回收http://wenku.baidu.com/link?url=gf08pYxNxVC2ZR607Qv9gn1pkFs5T1Pp5YHxISBEFdcz0D1HdK-7YOuSDft ...