最近手头需要开发一个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"); } }
相关推荐
《Android Gradle Plugin用户指南》是一份详细的文档,旨在帮助...无论你是新手还是经验丰富的开发者,这份指南都能帮助你更好地理解和利用Android Gradle Plugin,提升开发效率,实现更高质量的Android应用开发。
= 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=...
现在你可以用Gradlekotlin DSL来做一个完整的例子,检查https://github.com/skyscanner/gradle-time-logger-plugin/tree/master/exampleConsole报告程序控制台报告程序将所有信息转储到生命周期记录器mixpanel报告...
在Android开发中,Gradle Plugin扮演着至关重要的角色,它是一种强大的构建工具,允许开发者自定义构建过程。本文将深入探讨如何使用Gradle插件来修改class字节码,这在进行代码混淆、性能优化或者实现特定功能时...
总之,《Gradle插件用户指南中文版》是学习和实践Gradle插件的宝贵资源,它涵盖了从基础用法到高级特性的全方位指导,帮助开发者充分利用Gradle的强大功能,提升开发效率和构建质量。无论你是初学者还是经验丰富的...
Android Gradle Plugin7.1.2源码,直接在项目中依赖就可以查看源码
Gradle Eclipse Plugin是Gradle构建工具的一个重要组成部分,它允许开发者将Gradle项目与Eclipse集成,以便在Eclipse IDE中进行开发、调试和构建工作。这个插件提供了从Gradle构建到Eclipse工程配置的无缝转换,使得...
使用AndroidStudio的时候,对Gradle的配置完全不同,苦于找不到源码,所以我找了一份,供大家下载!下载过程在这里有描述:http://blog.csdn.net/lslxdx/article/details/50165613
虽然面对Gradle的频繁更新,开发者需要时刻关注插件的兼容性问题,但这仍然是一个值得信赖的工具,为Android开发带来了极大的便利。对于开源项目而言,合理运用Android Maven Gradle 插件能有效提升项目的可见度,...
《Composer Gradle Plugin:Gradle任务类型与插件的深度解析》 在现代软件开发中,构建工具扮演着至关重要的角色。Gradle作为一款强大的、灵活的自动化构建工具,广泛应用于Java、Android等项目的构建。它允许...
对于想要深入了解Gradle插件开发的开发者,"sdk-manager-plugin"是一个很好的实践案例。通过阅读和分析源码,可以学习如何编写Gradle插件,如何与Android SDK交互,以及如何自动化构建流程。 总结来说,尽管"gradle...
这份讲义“L21-Gradle Plugin”深入探讨了Gradle插件的开发和使用,尤其是Groovy语言在其中的应用。 首先,Groovy是一种动态类型的JVM语言,它与Java语法相似但更为简洁。在Groovy中,你可以省略getter和setter方法...
综上所述,`Gradle plugin to check library licenses and generate license pages.zip` 是开源项目许可证管理的得力助手,它将繁琐的手动工作自动化,提高了开发效率,同时也确保了项目遵守开源许可证的要求,为...
然后,在模块级别的build.gradle文件中,应用插件并配置输出选项,比如在`apply plugin`下面添加: ```groovy apply plugin: 'com.getkeepsafe.dexcount' dexcount { format = 'markdown' // 可选格式:text、...
在Android开发领域,Gradle是主流的构建工具,而自定义Gradle插件则能极大地提升项目的构建效率和灵活性。本文将深入探讨如何使用Android Studio开发Gradle插件,主要分为以下几个方面: 1. **Gradle插件基础** - ...
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"是一个非常实用的工具,它简化了Android开发中的资源优化工作,提高了构建效率,同时也帮助开发者创建更小、更快的APK应用。通过开源的方式,这个项目不断接受社区...
讲解 Gradle Plugin 中 sourceSets 元素。 Gradle Library Projects 讲解 Gradle 依赖。包含 .jar 依赖, Library project 依赖, Maven 依赖。 Gradle Build Configs 讲解 APK 打包时的签名设置。 Gradle Build ...
支持采用link方式安装!...eclipse gradle plugin的2017.7.13shapshot版,在从oxgen版本开始,eclipse j2ee开发版已经默认带上此插件。如果要使用最新的版本或者在mars等默认不带gradle插件的版本则可以使用此插件。