共享常用的Gradle配置片段

6 3月

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/03/06/share-common-gradle-script/

Gradle灵活而强大,而且自定义简单,会Groovy用Groovy,不会或者不想学的直接写Java也可以。

对于build.gradle而言,简单的项目还好,复杂项目这个配置就有点长了。

虽然可以通过将Gradle Script抽成单个文件的方式来让配置更清晰,但是这样并没有做到常用配置的共享。

因为很多配置其实是多个项目可以共用的,比如idea相关配置。

分割配置

当build.gradle文件越发繁琐的时候,最简单直接的方法就是将其拆分,比如idea相关配置可以拆分到 gradle目录中的idea.gradle文件中。

apply plugin:'idea'

idea {
module {
inheritOutputDirs =false
outputDir =file("$buildDir/classes/main/")
}

project {
ipr {
withXml { provider ->
def node = provider.asNode()
node.component.find { it.'@name' =='VcsDirectoryMappings' }?.mapping[0].'@vcs' ='Git'
}
}
}
}

然后在build.gradle文件中使用apply from引入:

applyfrom:'gradle/idea.gradle'

这样可以虽然让build.gradle简洁了,但是并没有达到共享gradle脚本片段的目的。

网络直接地址共享

因为gradle是支持从网络加载配置的,所以可以将公共的gradle配置片段共享出来,使用者直接从网络加载就可以了。

applyfrom:'http://server-url/idea.gradle'

当然这样就要求你需要一个服务器来提供这个服务,至少也是一个文件服务器。

如果有现有的repo,如Nexus,那么还可以这样共享

apply from: 'http://server-url/nexus/service/local/artifact/maven/redirect?r=repository-name&g=group-name&a=build-common&e=gradle&v=LATEST'

这样就可以还可以达到版本管理的功能。

从依赖中解压

如果gradle配置片段已经存在于repo中了,还有一种选择是将其下载并解压,然后再引入。

buildscript {
repositories {
//my own repo
}
dependencies {
classpath'com.huangyunkun:common-build:1.0.0-SNAPSHOT'
}
dependencies {
ant.unjar src:configurations.classpath.singleFile, dest:'gradle'
}
}

applyfrom:'gradle/common.gradle'

直接从依赖中获取配置

上面的办法需要解压,其实不解压也是可以的,直接从依赖中加载即可。

buildscript {
repositories {
//my own repo
}
dependencies {
classpath'com.huangyunkun:common-build:1.0.0-SNAPSHOT'
}
}

afterEvaluate {project ->
applyfrom:project.buildscript.classLoader.getResource('path/to/your/resource/in/the/jar').toURI()
}

直接使用插件

当然,还有一种办法是直接打包一个gradle plugin。

buildscript {
repositories {
//my own repo
}
dependencies {
classpath'com.huangyunkun:common-build:1.0.0-SNAPSHOT'
}
}

apply plugin:"common-build"

我始终觉得为了共享配置片段而打包一个plugin有点不值,不过这种方法的代码确实最少最容易懂得。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/03/06/share-common-gradle-script/

发表回复

您的电子邮箱地址不会被公开。