使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件

先上效果图:

image.png

功能说明:

korGenerate:

自动生成 Entity,Dao,Controller 模板代码

korFront:

自动 copy 前端 front 工程目录下面的 —— nowa 构建的 dist 目录下的静态资源文件:html, css, js


image.png
image.png
image.png
image.png
image.png

build.gradle

group 'com.easykotlin.plugin'
version '1.0-SNAPSHOT'buildscript {ext.kotlin_version = '1.2.0'repositories {mavenCentral()}dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"}
}apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'maven'sourceCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"compile 'org.codehaus.groovy:groovy-all:2.3.11'testCompile group: 'junit', name: 'junit', version: '4.12'compile gradleApi()
}compileKotlin {kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {kotlinOptions.jvmTarget = "1.8"
}
image.png

其中,compile gradleApi() 是使用 Gradle 的 API 依赖。

配置上传到 maven 仓库,这里我们配置上传至本机的目录下:

apply plugin: 'maven'uploadArchives {repositories {mavenDeployer {repository(url: uri('/Users/jack/.m2/repository'))}}
}

点击右侧工具栏的: upload > uploadArchives

image.png

执行日志:

23:41:48: Executing external task 'uploadArchives'...
:compileKotlin UP-TO-DATE
:compileJava NO-SOURCE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:uploadArchivesBUILD SUCCESSFUL in 0s
4 actionable tasks: 1 executed, 3 up-to-date
23:41:49: External task execution finished 'uploadArchives'.

看一下本机的上传情况:

~/.m2/repository/com/easykotlin/plugin/kor$ tree
.
├── 1.0-SNAPSHOT
│   ├── kor-1.0-20171221.172201-1.jar
│   ├── kor-1.0-20171221.172201-1.jar.md5
│   ├── kor-1.0-20171221.172201-1.jar.sha1
│   ├── kor-1.0-20171221.172201-1.pom
│   ├── kor-1.0-20171221.172201-1.pom.md5
│   ├── kor-1.0-20171221.172201-1.pom.sha1
│   ├── kor-1.0-20171221.172210-2.jar
│   ├── kor-1.0-20171221.172210-2.jar.md5
│   ├── kor-1.0-20171221.172210-2.jar.sha1
│   ├── kor-1.0-20171221.172210-2.pom
│   ├── kor-1.0-20171221.172210-2.pom.md5
│   ├── kor-1.0-20171221.172210-2.pom.sha1
│   ├── maven-metadata-remote.xml
│   ├── maven-metadata-remote.xml.sha1
│   ├── maven-metadata.xml
│   ├── maven-metadata.xml.md5
│   ├── maven-metadata.xml.sha1
│   └── resolver-status.properties
├── maven-metadata-remote.xml
├── maven-metadata-remote.xml.sha1
├── maven-metadata.xml
├── maven-metadata.xml.md5
├── maven-metadata.xml.sha1
└── resolver-status.properties1 directory, 24 files

其中,kor-1.0-20171221.154128-1.pom 文件的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><groupId>com.easykotlin.plugin</groupId><artifactId>kor</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib-jdk8</artifactId><version>1.2.0</version><scope>compile</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
</project>

新建Gradle 插件的执行逻辑的实现类

image.png
image.png
image.png

实现代码编写:

image.png
image.png
package com.easykotlin.korimport org.gradle.api.Plugin
import org.gradle.api.Projectclass KorPlugin implements Plugin<Project>{@Overridevoid apply(Project project) {}
}

具体实现代码:

package com.easykotlin.korimport org.gradle.api.Plugin
import org.gradle.api.Projectclass KorPlugin implements Plugin<Project> {@Overridevoid apply(Project project) {project.task("kor") << {println("Hello, Kor !")println(project.group.toString())println(project.artifacts.toString())}project.task("nowabuild") << {NowaBuildJava nb = new NowaBuildJava()String projectDir = project.projectDir.absolutePathprintln("projectDir = $projectDir")nb.nowaBuild(projectDir)}}
}

kor.properties

implementation-class=com.easykotlin.kor.KorPlugin
image.png

build.gradle

group 'com.easykotlin.plugin'
version '1.0-SNAPSHOT'buildscript {ext.kotlin_version = '1.2.0'repositories {mavenCentral()}dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"}
}apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'maven'sourceCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
//    compile 'org.codehaus.groovy:groovy-all:2.4.11'testCompile group: 'junit', name: 'junit', version: '4.12'compile gradleApi()
}compileKotlin {kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {kotlinOptions.jvmTarget = "1.8"
}uploadArchives {repositories {mavenDeployer {repository(url: uri('/Users/jack/.m2/repository'))}}
}
image.png

然后,我们在另外项目 reakt 中使用刚才开发的插件:

build.gradle

buildscript {ext {kotlinVersion = '1.2.0'springBootVersion = '2.0.0.M7'}repositories {mavenLocal()mavenCentral()maven { url "https://repo.spring.io/snapshot" }maven { url "https://repo.spring.io/milestone" }}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")classpath('com.easykotlin.plugin:kor:1.0-SNAPSHOT')}
}apply plugin: 'com.easykotlin.kor'......
image.png
image.png

Gradle 插件工程源代码:

https://github.com/EasySpringBoot/kor

使用插件的工程源代码:

https://github.com/EasyKotlin/reakt

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件相关推荐

  1. java开发一个简单的通讯录

    java开发一个简单的通讯录 ArrayList的综合应用 import java.util.*; public class ContactNote{static Scanner sc=new Sca ...

  2. 如何用java开发一个网站?

    问题:如何用java开发一个网站? 下载了最新的JDK软件.最新的Eclipse.数据库mysql以及tomcat.struts但是不知道怎么连接起来,在数据库连接的时候mysql-connector ...

  3. java linux 管理系统_用Java开发一个本地服务管理软件

    使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...

  4. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  5. 如何添加MySQL插件_如何开发一个自定义的MySQL插件

    MySQL自带了很多插件,比如半同步插件.审计插件.密码验证插件等等,甚至MySQL存储引擎也是以插件方式实现的.MySQL开放的插件接口,为开发者开发自定义插件提供了便利.本文将介绍如何快速开发一个 ...

  6. 用Java开发一个停车场系统

    作者:亰 blog.csdn.net/weixin_43951778/article/details/109643951 现开发一个停车系统,用户根据车位停车 1)车主查看现在有无车位(最多100个车 ...

  7. 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  8. Java开发一个家庭收支记账软件

    4.请开发一个家庭收支记账软件 界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1 收支明细 2 登记收入 3 登记支出 4 退 出 请 ...

  9. 使用java开发一个股票交易及量化投资回测分析系统

    经过近两年的研究和学习,我使用java开发(也使用了部分python,数据源:聚宽)出了一个股票交易及量化投资回测分析系统,将于近期陆续推出系列文章,向大家介绍一下整个开发过程,当整个系列文章都完成后 ...

  10. 利用java开发一个猜数字幸运小游戏:游戏规则如下

    package com.day04.www;import java.util.Random; import java.util.Scanner;public class day04 {public s ...

最新文章

  1. Linux的I/O多路复用机制之--selectpoll
  2. SpringBoot+pagehelper分页之后还显示全部数据(分页不管用)的解决方案
  3. Ubuntu下pip安装、升级、卸载
  4. 2021 4 21 管理心得
  5. POJ-1789 Truck History 最小生成树
  6. ubuntu12.04安装KDevelop
  7. Android全局窗口模糊,javascript – 窗口焦点和模糊事件在Android浏览器上无法正常工作...
  8. java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
  9. 部署点评Cat监控项目(转)
  10. 朋友圈最忌讳发什么?
  11. 使用JavaScript调用手机平台上的原生API 1
  12. java泛型范围_Java泛型类型中的通配符参数在其范围内的正式条件是什么?
  13. it男如何像黑客一样聊天qq
  14. c语言多位数除法,大数除法 C语言
  15. 流水号(自动编号)生成相关问题(并发、事务)及解决方案
  16. Kafka-安装和使用
  17. 【Unity】 HTFramework框架(三十九)UI的数据驱动模式,MVVM
  18. 香烟logo设计灵感 - logo设计公司 - ci设计
  19. 【YOLOV5-5.x 源码解读】common.py
  20. Android UI详解之布局管理器(一)

热门文章

  1. javascript 正则表达式小案例
  2. 代码的执行效率(3)--缓存与局部性 摘自赵劼老师的博客
  3. Matlab连接字符串的方法
  4. tensorflow.python.framework.errors_impl.NotFoundError: Could not find valid device for node.
  5. matlab的conv2、imfilter、filter2
  6. PostgreSQL(2)常用命令(附教程)
  7. EXCEL IF、AND以及OR函数的嵌套使用
  8. ArcGIS操作小技巧(一)之属性表中显示出小数点前面的 0
  9. java中的implements如何打开_Java 中extends与implements使用方法
  10. 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?