使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件
先上效果图:
功能说明:
korGenerate:
自动生成 Entity,Dao,Controller 模板代码
korFront:
自动 copy 前端 front 工程目录下面的 —— nowa 构建的 dist 目录下的静态资源文件:html, css, js
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"
}
其中,compile gradleApi() 是使用 Gradle 的 API 依赖。
配置上传到 maven 仓库,这里我们配置上传至本机的目录下:
apply plugin: 'maven'uploadArchives {repositories {mavenDeployer {repository(url: uri('/Users/jack/.m2/repository'))}}
}
点击右侧工具栏的: upload > uploadArchives
执行日志:
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 插件的执行逻辑的实现类
实现代码编写:
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
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'))}}
}
然后,我们在另外项目 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'......
Gradle 插件工程源代码:
https://github.com/EasySpringBoot/kor
使用插件的工程源代码:
https://github.com/EasyKotlin/reakt
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件相关推荐
- java开发一个简单的通讯录
java开发一个简单的通讯录 ArrayList的综合应用 import java.util.*; public class ContactNote{static Scanner sc=new Sca ...
- 如何用java开发一个网站?
问题:如何用java开发一个网站? 下载了最新的JDK软件.最新的Eclipse.数据库mysql以及tomcat.struts但是不知道怎么连接起来,在数据库连接的时候mysql-connector ...
- java linux 管理系统_用Java开发一个本地服务管理软件
使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...
- 编程语言用 Java 开发一个打飞机小游戏(附完整源码)
编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...
- 如何添加MySQL插件_如何开发一个自定义的MySQL插件
MySQL自带了很多插件,比如半同步插件.审计插件.密码验证插件等等,甚至MySQL存储引擎也是以插件方式实现的.MySQL开放的插件接口,为开发者开发自定义插件提供了便利.本文将介绍如何快速开发一个 ...
- 用Java开发一个停车场系统
作者:亰 blog.csdn.net/weixin_43951778/article/details/109643951 现开发一个停车系统,用户根据车位停车 1)车主查看现在有无车位(最多100个车 ...
- 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...
- Java开发一个家庭收支记账软件
4.请开发一个家庭收支记账软件 界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1 收支明细 2 登记收入 3 登记支出 4 退 出 请 ...
- 使用java开发一个股票交易及量化投资回测分析系统
经过近两年的研究和学习,我使用java开发(也使用了部分python,数据源:聚宽)出了一个股票交易及量化投资回测分析系统,将于近期陆续推出系列文章,向大家介绍一下整个开发过程,当整个系列文章都完成后 ...
- 利用java开发一个猜数字幸运小游戏:游戏规则如下
package com.day04.www;import java.util.Random; import java.util.Scanner;public class day04 {public s ...
最新文章
- Linux的I/O多路复用机制之--selectpoll
- SpringBoot+pagehelper分页之后还显示全部数据(分页不管用)的解决方案
- Ubuntu下pip安装、升级、卸载
- 2021 4 21 管理心得
- POJ-1789 Truck History 最小生成树
- ubuntu12.04安装KDevelop
- Android全局窗口模糊,javascript – 窗口焦点和模糊事件在Android浏览器上无法正常工作...
- java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
- 部署点评Cat监控项目(转)
- 朋友圈最忌讳发什么?
- 使用JavaScript调用手机平台上的原生API 1
- java泛型范围_Java泛型类型中的通配符参数在其范围内的正式条件是什么?
- it男如何像黑客一样聊天qq
- c语言多位数除法,大数除法 C语言
- 流水号(自动编号)生成相关问题(并发、事务)及解决方案
- Kafka-安装和使用
- 【Unity】 HTFramework框架(三十九)UI的数据驱动模式,MVVM
- 香烟logo设计灵感 - logo设计公司 - ci设计
- 【YOLOV5-5.x 源码解读】common.py
- Android UI详解之布局管理器(一)
热门文章
- javascript 正则表达式小案例
- 代码的执行效率(3)--缓存与局部性 摘自赵劼老师的博客
- Matlab连接字符串的方法
- tensorflow.python.framework.errors_impl.NotFoundError: Could not find valid device for node.
- matlab的conv2、imfilter、filter2
- PostgreSQL(2)常用命令(附教程)
- EXCEL IF、AND以及OR函数的嵌套使用
- ArcGIS操作小技巧(一)之属性表中显示出小数点前面的 0
- java中的implements如何打开_Java 中extends与implements使用方法
- 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?