最近手头需要开发一个Gradle插件,于是研究了几天,基本实现了一个Gradle插件。总结一下Gradle插件开发的步骤。
- 首先需要建一个gradle工程,需要添加以下依赖
dependencies { compile gradleApi() compile 'org.codehaus.groovy:groovy:2.1.5' }
- 例如:新建一个groovy工程testPlugin,build.gradle如下,注意我这里为了简单使用的本地的maven库,发布到本地文件,都可以改成maven资源库。
apply plugin: "groovy" apply plugin: "maven" group = "my.test" version = "1.0-SNAPSHOT" defaultTasks 'clean', 'jar' sourceSets { main { groovy { srcDirs = [ 'src/main/groovy', 'src/main/java' ] } // compile everything in src/ with groovy java { srcDirs = []} // no source dirs for the java compiler } } repositories { mavenLocal() } dependencies { tasks.withType(Compile) { options.encoding = "UTF-8" } compile 'org.codehaus.groovy:groovy:2.1.5' compile gradleApi() } // custom tasks for creating source jars task sourcesJar(type: Jar, dependsOn:classes) { classifier = 'sources' from sourceSets.main.allSource } // add source jar tasks as artifacts artifacts { archives sourcesJar } // upload to local uploadArchives { repositories { flatDir { name 'localRepository' } } repositories { localRepository { dirs '../local-repo' } } }
- 配置sourceSets
- 注意gradle编译时,先执行compileJava,后执行compileGroovy
- gradle源码中compileGroovy是dependsOn compileJava的
- 解决java&groovy混合编译的问题
- 当java执行需要groovy编译完的class时,可以通过设置sourceSets来解决这个问题,即把java对应的srcDirs置为空,把java的src放入groovy中的srcDirs中,如下代码所示
sourceSets { main { groovy { srcDirs = ['src/main/groovy','src/main/java']} // compile everything in src/ with groovy java { srcDirs = []} // no source dirs for the java compiler } }
- 实现Plugin接口,完成插件的实现
- 插件可以是用Groovy编写,也可以是Java来编写,参考各自API即可
- 例如,我这里写了个简单的插件,为了混编java和groovy,实现java里获得groovy(build.gradle)中的变量,这个插件用两种方式给工程建立了两个task,注意TestPluginConvention是个groovy编译后的class
package com.test.gradle; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.tasks.Copy; import com.test.task.TestTask; public class TestPlugin implements Plugin<Project> { @Override public void apply(final Project project) { // 引用groovy扩展变量 final TestPluginConvention pluginConvention = new TestPluginConvention(project); project.getConvention().getPlugins().put("testPlugin", pluginConvention); // 创建hello任务 project.getTasks().add("hello", TestTask.class); // 创建copyAll任务 Copy copyTask = project.getTasks().add("copyAll", Copy.class); copyTask.dependsOn(project.getPath() + ":jar"); copyTask.from(project.getConfigurations().getByName("runtime")); copyTask.from(project.getBuildDir().getPath() + "/classes/main"); copyTask.from(project.getBuildDir().getPath() + "/classes/resources"); copyTask.into(project.getBuildDir().getPath() + "/dist"); } }
相关推荐
= JMH Gradle Plugin :jmh-version: 1.21 :plugin-version: 0.4.8 image:http://img.shields.io/travis/melix/jmh-gradle-plugin/master.svg["Build Status (travis)", link=...
Gradle-Plugin-User-Guide-Chinese-Verision, Gradle Plugin User Guide 中文翻译
现在你可以用Gradlekotlin DSL来做一个完整的例子,检查https://github.com/skyscanner/gradle-time-logger-plugin/tree/master/exampleConsole报告程序控制台报告程序将所有信息转储到生命周期记录器mixpanel报告...
Gradle Plugin 修改其class 字节码的Demo
Android Gradle Plugin User Guide 英文版
Android Gradle Plugin7.1.2源码,直接在项目中依赖就可以查看源码
gradle plugin user guide中文版,翻译自安卓官网的新构建系统中的gradle插件用户指导一文。
公司不能安装gradle elcipse plugin,自己制作一个.
Gradle plugin to check library licenses and generate license pages.zip,Gradle插件检查库许可证并生成许可证页面。
L21-Gradle Plugin-讲义.pdf
使用AndroidStudio的时候,对Gradle的配置完全不同,苦于找不到源码,所以我找了一份,供大家下载!下载过程在这里有描述:http://blog.csdn.net/lslxdx/article/details/50165613
Dexcount Gradle Plugin A Gradle plugin to report the number of method references in your APK or AAR on every build. This helps you keep tabs on the growth of your app, with an eye to staying ...
Gradle plugin to optimize png files.zip,Gradle插件,用于优化PNG文件,并在Android项目中减少生成的APK大小。
支持采用link方式安装!...eclipse gradle plugin的2017.7.13shapshot版,在从oxgen版本开始,eclipse j2ee开发版已经默认带上此插件。如果要使用最新的版本或者在mars等默认不带gradle插件的版本则可以使用此插件。
DexCount Gradle插件
google推出了全新的Android Studio集成开发环境,其中Android项目的结构与Eclipse的Android项目结构有很大的区别,原因就在于两开发环境使用的构建工具不同...对应Android项目的Gradle插件就是Android Gradle Plugin。
Gradle Plugin for Spoon 2 和Android Gradle Plugin 3 。
- 基本开发类知识点包括:`gradle 工程创建`、`插件发布`、`Swing UI`、`各类窗体`、`菜单配置`、`工程上下文对象`、`向导步骤`、`内容存放`、`配置加载`等,通过这些知识在案例中的逐个使用,而学习如何开发插件。...
offline-android-gradle-plugin-preview.zip文件126M,2020/06/22日官网下载的。离线编译工程用
讲解 Gradle Plugin 中 sourceSets 元素。 Gradle Library Projects 讲解 Gradle 依赖。包含 .jar 依赖, Library project 依赖, Maven 依赖。 Gradle Build Configs 讲解 APK 打包时的签名设置。 Gradle Build ...