gradle 简介
基于Groovy实现的自动化构建工具,比maven好的一点在于不用写复杂的xml文件。使用script就可以。
gradle 专业名词
从一个build.gradle 文件开始,build.gradle 文件就是maven中pom.xml
buildscript { repositories { mavenCentral() maven { url 'file:local_repo' } } dependencies { classpath group: 'test', name: 'build-plugin', version: '1.0' }}apply plugin: 'com.stone.build'plugins { id "net.saliman.cobertura" version "2.3.2"}subprojects { subproject -> apply plugin: 'eclipse' apply plugin: 'java' repositories { mavenCentral() } dependencyManagement { dependencies { //common dependency dependency "commons-io:commons-io:$COMMON_VERSION" } } dependencies { compile 'commons-io:commons-io' compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+' }}task wrapper(type: Wrapper) { gradleVersion = '2.3'}
buildscript
buildscript 中指定当前这个build.gradle 的执行环境。repository 指定当需要下载依赖时查找的中心库
apply plugin 引用gradle插件,gradle有很多已有的plugin。或者你可以定制一个。查询已有的plugin
plugins apply plugin 的简化写法,gradle 2.1 中引入的。没必要再写dependency,然后使用apply plugin 引入
subproject 定义子project的共同行为
dependencyManagement 当有多个project,各个project有一些共同的jar包依赖。在这边声明jar包的统一版本.
这边只是声明,并没有引入,需要在dependencies中引入。如果在dependencies中没有定义jar包版本,则继承dependcyManagement中的jar包版本。否则会覆盖
dependencies 工程依赖的jar包
wrapper 指定project 运行的gradle 版本。生成gradlew 可执行文件。运行./gradlew build时会去下wrapper task 中指定的gradle 版本。这样可以运行在没有安装gradle 的环境。当然如果你的环境中已经安装了gradle,而且可以运行project.可以直接使用gradle build命令。gradle 常见命令
gradle buildEnvironment 查看build script 块中定义的dependencies
gradle -q dependencies $subprojectname:dependencies
列出subproject 的包依赖gradle plugin开发
gradle 支持自定义plugin。开发很简单。实现Plugin 即可。
这边主要介绍另外一种,将task与project 解耦的方法。
定义task
继承DefaultTask,然后在@TaskAction 方法中定义Task执行的具体任务
package davenkinimport org.gradle.api.Pluginimport org.gradle.api.Projectimport org.gradle.api.DefaultTaskimport org.gradle.api.tasks.TaskActionclass ShowTimeTask extends DefaultTask { @TaskAction def showTimeTask(){ println "Current time is " + new Date().format(project.dateAndTime.timeFormat) }}
向project中注入task
plugin实现Plugin,然后通过project.task注入。
package davenkinimport org.gradle.api.Pluginimport org.gradle.api.Projectimport davenkin.ShowTimeTaskimport davenkin.ShowDateTaskclass DateAndTimePlugin implements Plugin{ void apply(Project project) { project.extensions.create("dateAndTime", DateAndTimePluginExtension) project.task('showTime', type: ShowTimeTask); project.task('showDate', type: ShowDateTask); }}
源码:
plugin publish
artifactory { clientConfig.setIncludeEnvVars(true) contextUrl = 'http://localhost:8081/artifactory/' publish { repository { repoKey = 'libs-release-local' username = "admin" password = "password" } } }publishing { publications { mavenJar(MavenPublication) { from components.java } }}artifactoryPublish { publications('mavenJar') }
如果artifactory中没有自定义publications。在artifactory中也可以指定默认的publish内容。
gradle issues
Q1: gradle设置多个repo,不生效,只会找最上面的一个repo
A1: 将多个url分开写。将mavenCentral()放在最上面
mavenCentral() maven { url } maven { url ‘file:local_repo’}参考