1.新建Gradle项目:

2.建立src/main/groovy目录,并添加如下代码:

ConfigPlugin.groovy

package com.wemall.config

import org.gradle.api.Plugin
import org.gradle.api.Project class ConfigPlugin implements Plugin<Project> { void apply(Project project) {
project.extensions.create("configPluginExtension", ConfigPluginExtension)
project.task("configTask", type: ConfigTask)
}
}

ConfigTask.groovy
package com.wemall.config

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction import groovy.swing.impl.DefaultAction
import groovy.xml.Namespace
import groovy.xml.StreamingDOMBuilder class ConfigTask extends DefaultTask { static final String CONFIG_CENTER_URL = "http://192.168.127.137:8080/config-center-0.0.1-SNAPSHOT/"; @TaskAction
void download() { def names = project.configPluginExtension.name;
def version = project.configPluginExtension.version; names.each { name -> def inputStream = new URL(CONFIG_CENTER_URL + name).openStream(); println ("${project.projectDir} , ${project.buildDir}, ${project.rootDir}, ${project.resources}"); def file = new File("${project.projectDir}/src/main/resources/${name}");
file.withOutputStream {
outputStream ->
outputStream << inputStream;
}
}
} }

ConfigPluginExtension.groovy
package com.wemall.config

class ConfigPluginExtension {

    def name = [];
def version = "";
}

3.在src/main/resources下建立MEAT-INFO/gradle-plugins目录,并添加com.wemall.config.properties配置文件

com.wemall.config.properties内容,这个properties文件的名称,就为自定义Gradle插件名称.

implementation-class=com.wemall.config.ConfigPlugin

4.build.gradle文件内容:

apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: 'maven-publish' dependencies {
compile gradleApi()
compile localGroovy()
} group='com.wemall.config'
version='1.0.7-SNAPSHOT' publishing {
publications {
maven(MavenPublication) {
groupId project.group
artifactId project.name
version project.version
//若是war包,就写components.web,若是jar包,就写components.java
from components.java
}
}
repositories {
maven { if (project.version.endsWith('-SNAPSHOT')) {
url = "http://192.168.184.155:8081/repository/maven-snapshots/"
} else {
url = "http://192.168.184.155:8081/repository/maven-releases/"
} credentials {
username 'admin'
password 'admin123'
}
}
}
}

5.发布接入到nexus仓库中:

6.其他gradle项目引入插件:

buildscript {
repositories {
maven {
url 'http://192.168.184.155:8081/repository/maven-public/'
}
} dependencies {
classpath group: 'com.wemall.config',name: 'config-plugin',version: '1.0.7-SNAPSHOT'
}
} plugins {
id 'java-library'
} apply plugin: 'com.wemall.config' dependencies {
testImplementation 'junit:junit:4.12'
} configPluginExtension {
name = ["a.properties", "b.properties", "c.properties"]
version = "1.0.0-SNAPSHOT"
}

7.在引入插件的项目中运行插件:

gradlew -q configTask

此时configTask插件就可以连接到网址的配置中上下载配置文件。configTask名称为ConfigPlugin.groovy文件中的project.task("configTask", type: ConfigTask)字符串名称。

github:https://github.com/dingyingsi/configuration-download-plugin

gradle 自定义插件 下载配置文件的更多相关文章

  1. Gradle 自定义插件

    使用版本 5.6.2 插件被用来封装构建逻辑和一些通用配置.将可重复使用的构建逻辑和默认约定封装到插件里,以便于其他项目使用. 你可以使用你喜欢的语言开发插件,但是最终是要编译成字节码在 JVM 运行 ...

  2. Android gradle 自定义插件

    Gradle 的插件有三种打包方式: 构建脚本:插件逻辑写在 build.gradle 中,适用于逻辑简单的任务,但是该方式实现的插件在该构建脚本之外是不可见的,只能用于当前脚本. buildSrc项 ...

  3. AS 自定义 Gradle plugin 插件 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题

    在使用Android Studio 这个IDE时,出现com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题 可能的原因就是网速不好或者依 ...

  5. jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)

    上一篇记录了BaiduTemplate模板引擎使用示例附源码,在此基础上对使用方法进行了封装 自定义插件jajaxrefresh.js 代码如下: //闭包限定命名空间 (function ($) { ...

  6. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  7. cordova3.X 运用grunt生成plugin自定义插件骨架

    Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等.Cordova还提供了一组统一的JavaScript类库,以及为这些 ...

  8. CKEditor在线编辑器增加一个自定义插件

    CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...

  9. BrnShop开源网上商城第四讲:自定义插件

    重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的 ...

随机推荐

  1. fromdata上传多个文件

    function upload_single_file(value){ if(value==''){ layer.msg('请添加文件',{time:1500}) }else{ var formDat ...

  2. 学以致用三十三-----django生命周期

    听了讲解django的视频后,受益匪浅,每个知识点老师都会总结整理.学会总结,存为己用. django生命周期弄明白后,对于整个django的框架会有一个清晰的了解.先上图 1.客户端发送请求,在dj ...

  3. Leetcode(二)两数相加

    两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...

  4. ANDROID说说对MENU的理解

    ANDROID%E5%88%9D%E5%AD%A6%E4%B9%8B%E7%AE%80%E6%98%93%E8%AE%A1%E7%AE%97%E5%99%A8 Ѿ�����ڴ����㺰ô�

  5. angular-指令

    ng-app 作用域 ng-init 声明 module 模块 ng-model 双向绑定 ng-bind 绑定 angular是一个MVC框架:即 M------------------module ...

  6. 133. leetcode-Clone Graph

    拷贝图,可以一边遍历一边拷贝 DFS class Solution { public: Node* cloneGraph(Node* node) { unordered_map<int, Nod ...

  7. Javascript高级编程学习笔记(24)—— 函数表达式(2)闭包

    昨天的文章中主要记录了,函数表达式与函数声明的区别 以及在JS中如何安全地使用递归 那么既然要深入地理解JS中的函数,闭包就是一个绕不开的概念 闭包 JS高编一书中对闭包的概念定义如下: 闭包是指有权 ...

  8. Django项目解决跨域问题

    在配置文件INSTALLED_APPS中添加: 'corsheaders', 在MIDDLEWARE中添加: 'corsheaders.middleware.CorsMiddleware', 最后添加 ...

  9. python_正则表达式概述

    正则表达式(RegularExpression, re) - 是一个计算机科学的概念- 用于使用单个字符串来描述,匹配符合某个规则的字符串- 常常用来检索,替换某些模式的文本 # 正则的写法- .(点 ...

  10. 参考信息 - 云计算与Kubernetes

    基本概念 基础设施即服务(Infrastructure as a service) 通常指的是在云端为用户提供基础设施,如:虚拟机.服务器.存储.负载均衡.网络等等.亚马逊的AWS就是这个领域的佼佼者 ...