gradle插件上传Jcenter与自建Maven私服

DEMO地址:https://github.com/zhaopingfu/listener21

Gradle插件上传jcenter(开源出去,给别人用)

javalibrary

这里使用的工具是AndroidStudio

由于我们这里注册的是个人帐号,而不是组织账号,所以我们必须把源码也上传上去

  • 1、首先新建一个javalibrary
    File -> new -> new Module -> java library
    名字就叫plugin

  • 2、创建src/main/groovy/com/pf/plugin/Plugin3.groovy

在里面写

package com.pf.plugin

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

class Plugin3 implements Plugin<Project> {

    @Override
    void apply(Project project) {
        //这里只是为了测试,就打印以下
        println 'plugin3======='
    }
}
  • 3、在main下面新建resources文件夹
    里面创建META-INF/gradle-plugins/com.pftest.plugin.properties

里面就写一句话

implementation-class=com.pf.plugin.Plugin3

注意:这个com.pftest.plugin就是以后

apply 'com.pftest.plugin'
  • 4、build.gradle配置

    在build.gradle中设置一些属性,其中包括要上传的内容,上传的group名,artifactId,还有版本号的

这里可以借助一个jcenter官方的一个插件
https://github.com/bintray/gradle-bintray-plugin

注册jcenter帐号

注意,这里注册开源库帐号

这里写图片描述

注意,这里的邮箱,QQ邮箱和163邮箱都不可以,推荐注册一个gemail(谷歌邮箱,以后用到也方便)

来到了jcenter

用上面注册的帐号登录到jcenter里面

创建一个仓库

这里写图片描述

这里写图片描述

之后拿到key

这里写图片描述

这里写图片描述

之后,将复制到的key值放在项目中,比如放在gradle.properties中

userkey=这里是私人密码,就不放出来了

之后按照https://github.com/bintray/gradle-bintray-plugin步骤来

build.gradle配置

build.gradle中

apply plugin: 'java'
apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

group 'com.pftest.plugin'
version '1.0.0'

apply plugin: 'maven-publish'

//源代码打包任务
task sourcesJar(type: Jar) {
    baseName 'test'
    classifier 'sources'//分类器,区分其他jar包
    from sourceSets.main.allSource
}

//文档包任务
task docJar(type: Jar, dependsOn: [javadoc, groovydoc]) {
    baseName 'test'
    classifier 'doc'//分类器,区分其他jar包
    from javadoc.destinationDir, groovydoc.destinationDir
}

//配置工程工件,也就是jar产出的配置
artifacts {
    archives sourcesJar
    archives docJar
}

//上传配置
publishing {
    publications {
        plugin(MavenPublication) {
            from components.java
            //如果不指定,默认就是工程名
            artifactId 'plugin21'

            artifact sourcesJar
            artifact docJar

            //pom文件配置
            pom.withXml {
                def root = asNode()
                def licensesNode = root.appendNode('licenses').appendNode('license')
                licensesNode.appendNode('name', 'Apache License, Version 2.0')
                licensesNode.appendNode('url', 'https://www.apache.org/licenses/LICENSE-2.0.txt')
                licensesNode.appendNode('distribution', 'repo')
                licensesNode.appendNode('comments', 'A business-friendly OSS license')
            }
        }
    }
}

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
    }
}
apply plugin: 'com.jfrog.bintray'

bintray {
    user = 'zhaopf'
    key = userkey
    //上传的内容
    publications = ['plugin']
    pkg {
        repo = 'test_gradle'//需要上传的仓库名
        name = 'test'//上传到jcenter的项目名
        //userOrg = 'bintray_user'//可选的,不传的话默认是上面的user
        licenses = ['Apache-2.0']//开源许可
        //这里的地址是不会验证的,随便输入都可以,不配置也可以
        vcsUrl = 'https://xxx.git'
        version {
            //name = '1.0-Final'//使用外面的version
            desc = 'just test'
            released = new Date()
            vcsTag = '1.3.0'//版本控制里面的版本控制,比如svn,git
            attributes = ['gradle-plugin': 'xxx']
        }
    }
}

上传

同步一下项目,在右边的gradle任务中,有一个bintrayUpload的任务,双击执行
这里写图片描述

之后在jcenter中就可以看到我们刚才上传的内容了

这里写图片描述

这里应该会有一个提示,就是说是否上传上去,他只帮我们保留7天,这个时候点击publish,提示就消失了

这里写图片描述

项目中使用

这个时候如果想在项目里引用的话,有两种方式,一种是上传到jcenter,另一种就是直接用了

  • 上传到jcenter,给jcenter发邮件,如果通过了就可以用了

这里写图片描述

收到他的审核通过的邮件之后,直接在项目中

这里写图片描述

这里写图片描述

  • 没有上传到jcenter

这里写图片描述

最后在app模块下使用

//这个名字就是刚才resources下的com.pftest.plugin.properties的名字
apply plugin: 'com.pftest.plugin'

buildscript{
    repositories{
        //这里把这个注掉,让他去远端下载
//        mavenLocal()
        //这里用的就是刚才复制的链接
        maven{
            url 'https://dl.bintray.com/zhaopf/test_gradle'
        }
        //如果jcenter发邮件说上传成功了,就可以使用这种方式
        //jcenter()
    }
    dependencies{
        classpath 'com.pftest.plugin:plugin21:1.0.0'
    }
}

androidlibrary

这里参考的bintray官方给的demo:
https://github.com/bintray/bintray-examples/tree/master/gradle-bintray-plugin-examples/android-maven-example

跟上面一样,现在jcenter中创建一个仓库,因为上面已经创建了一个,这里就不创建了

首先新建androidlibrary这个module,里面有个build.gradle,这个是重头戏
参考:https://github.com/bintray/bintray-examples/blob/master/gradle-bintray-plugin-examples/android-maven-example/build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    }
}

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        //testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.3.1'
}

group 'com.pftest.plugin'
version '1.0.0'

//源代码打包任务
task sourcesJar(type: Jar) {
    //baseName 'androidtests'
    classifier 'sources'//分类器,区分其他jar包
    from android.sourceSets.main.java.srcDirs
}

//创建文档生成任务
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//文档包任务
task docJar(type: Jar, dependsOn: javadoc) {
    //baseName 'androidtests'
    classifier 'doc'//分类器,区分其他jar包
    from javadoc.destinationDir
}

//配置工程工件,也就是jar产出的配置
artifacts {
    archives sourcesJar
    archives docJar
}

bintray {
    user = 'zhaopf'
    key = userkey//这里的userkey定义在gradle.properties
    //上传的内容
    configurations = ['archives']
    pkg {
        repo = 'test_gradle'//需要上传的仓库名
        name = 'androidtests'//上传到jcenter的项目名
        //userOrg = 'bintray_user'//可选的,不传的话默认是上面的user
        licenses = ['Apache-2.0']//开源许可
        //这里的地址是不会验证的,随便输入都可以,不配置也可以
        vcsUrl = 'https://xxx.git'
        version {
            //name = '1.0-Final'//使用外面的version
            desc = 'just test'
            released = new Date()
            vcsTag = '1.3.0'//版本控制里面的版本控制,比如svn,git
            attributes = ['gradle-plugin': 'xxx']
        }
    }
}

//https://github.com/bintray/bintray-examples/blob/master/gradle-bintray-plugin-examples/android-maven-example/build.gradle
install {
    repositories.mavenInstaller {
        pom.project {
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    distribution 'repo'
                }
            }
        }
    }
}

之后在terminal里执行

gradlew install
gradlew bintrayUpload

这两个任务在右边的gradle的任务中也可以看到,install在other组里面

这里写图片描述

这个时候在jcenter中会发现已经有刚才上传的内容了,接着来套路,把通知后面的publish点击了,然后给jcenter发送邮件,他审核通过之后会给你回一个邮件,当你收到邮件之后,会看到group,版本号等,在build.gradle中直接引用以下就可以了

这里写图片描述

这里写图片描述

自建maven私服(比如想只在公司内部使用,不想开源出去)

首先下载:http://www.sonatype.org/

可以在https://www.sonatype.com/download-oss-sonatype下载对应系统的

下载下来之后是一个压缩包,解压之后有两个文件\nexus-3.5.2-01-win64\nexus-3.5.2-01\bin下有一个.exe文件

cmd进入bin目录下执行

nexus.exe/run

这里写图片描述

之后在浏览器里访问http://localhost:8081/

PS:默认端口是8081,如果想要修改的话,可以在/etc/nexus-default.properties中修改

右上角登录进去,默认帐号是admin,密码admin123,登陆不进去的话重新启动下服务

登录进去之后,在上边会有一个设置的图标

这里写图片描述

在这里可以配置用户,创建仓库等操作

这里先创建一个测试仓库

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

到这里就可以看到有一个test

之后在AndroidStudio中创建一个javalibrary,跟上面的一样

之后在build.gradle中配置

apply plugin: 'java'
apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

group 'com.pftest.plugin'
version '2.0.0'

apply from: 'upload2MyMaven.gradle'

//源代码打包任务
task sourcesJar(type: Jar) {
    baseName 'test'
    classifier 'sources'//分类器,区分其他jar包
    from sourceSets.main.allSource
}

//文档包任务
task docJar(type: Jar, dependsOn: [javadoc, groovydoc]) {
    baseName 'test'
    classifier 'doc'//分类器,区分其他jar包
    from javadoc.destinationDir, groovydoc.destinationDir
}

//配置工程工件,也就是jar产出的配置
artifacts {
    archives sourcesJar
    archives docJar
}

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
    }
}

上面的apply from: ‘upload2MyMaven.gradle’就是将上传配置放在了upload2MyMaven.gradle文件中

upload2MyMaven.gradle:

//私服下载地址:http://www.sonatype.org/
apply plugin: 'maven-publish'

//上传配置
publishing {
    publications {
        plugin(MavenPublication) {
            from components.java
            //如果不指定,默认就是工程名
            artifactId 'plugin21'

            artifact sourcesJar
            artifact docJar

            //pom文件配置
            pom.withXml {
                def root = asNode()
                def licensesNode = root.appendNode('licenses').appendNode('license')
                licensesNode.appendNode('name', 'Apache License, Version 2.0')
                licensesNode.appendNode('url', 'https://www.apache.org/licenses/LICENSE-2.0.txt')
                licensesNode.appendNode('distribution', 'repo')
                licensesNode.appendNode('comments', 'A business-friendly OSS license')
            }
        }
    }
    //配置上传的仓库
    repositories {
        maven{
            //这个name最后会生成一个对应的任务
            name 'haha'
            //这里如果是公司内部的服务的话,把localhost换成192.168.xxx
            url 'http://localhost:8081/repository/test/'
            //上传者身份
            credentials{
                //这里写了默认的帐号和密码
                username = 'admin'
                password = 'admin123'
            }
        }
    }
}

之后可以同步一下项目,在右边的gradle中可以看到上面的haha任务

这里写图片描述

双击执行这个任务开始上传

之后在库里面可以看到上传的内容

这里写图片描述

最后在项目中引用

apply plugin: 'com.pftest.plugin'
buildscript {
    repositories {
        //这里把这个注掉,让他去远端下载
//        mavenLocal()
        //这里用的就是刚才复制的链接
        maven {
            url 'http://localhost:8081/repository/test/'
        }
    }
    dependencies {
        //classpath 'com.pftest.plugin:plugin21:1.0.0'
        classpath 'com.pftest.plugin:plugin21:2.0.0'
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值