前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件

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

作者头像
一个会写诗的程序员
发布2018-08-17 11:32:14
1.2K0
发布2018-08-17 11:32:14
举报

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

先上效果图:

功能说明:

korGenerate:

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

korFront:

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


build.gradle

代码语言:javascript
复制
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"
}

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

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

代码语言:javascript
复制
apply plugin: 'maven'

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

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

执行日志:

代码语言:javascript
复制
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'.

看一下本机的上传情况:

代码语言:javascript
复制
~/.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 文件的内容是:

代码语言:javascript
复制
<?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 插件的执行逻辑的实现类

实现代码编写:

代码语言:javascript
复制
package com.easykotlin.kor

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

class KorPlugin implements Plugin<Project>{


    @Override
    void apply(Project project) {

    }
}

具体实现代码:

代码语言:javascript
复制
package com.easykotlin.kor

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

class KorPlugin implements Plugin<Project> {


    @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

代码语言:javascript
复制
implementation-class=com.easykotlin.kor.KorPlugin

build.gradle

代码语言:javascript
复制
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'))
        }
    }
}

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

build.gradle

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • korGenerate:
  • korFront:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档