使用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下载地址
Building_and_Testing_with_Gradle
- 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