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

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

先上效果图:

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第1张图片
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第2张图片
image.png

功能说明:

korGenerate:

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

korFront:

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


使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第3张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第4张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第5张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第6张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第7张图片
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.8

repositories {
    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"
}
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第8张图片
image.png

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

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

apply plugin: 'maven'

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

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

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第9张图片
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
:uploadArchives

BUILD 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.properties

1 directory, 24 files

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



  4.0.0
  com.easykotlin.plugin
  kor
  1.0-SNAPSHOT
  
    
      org.jetbrains.kotlin
      kotlin-stdlib-jdk8
      1.2.0
      compile
    
    
      junit
      junit
      4.12
      test
    
  


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

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第10张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第11张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第12张图片
image.png

实现代码编写:

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第13张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第14张图片
image.png
package com.easykotlin.kor

import org.gradle.api.Plugin
import org.gradle.api.Project

class KorPlugin implements Plugin{


    @Override
    void apply(Project project) {

    }
}

具体实现代码:

package com.easykotlin.kor

import org.gradle.api.Plugin
import org.gradle.api.Project

class KorPlugin implements Plugin {


    @Override
    void 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.absolutePath
            println("projectDir = $projectDir")
            nb.nowaBuild(projectDir)
        }
    }
}

kor.properties

implementation-class=com.easykotlin.kor.KorPlugin
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第15张图片
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.8

repositories {
    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'))
        }
    }
}

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第16张图片
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'

......

使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第17张图片
image.png
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件_第18张图片
image.png

Gradle 插件工程源代码:

https://github.com/EasySpringBoot/kor

使用插件的工程源代码:

https://github.com/EasyKotlin/reakt

你可能感兴趣的:(使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件)