这里使用的工具是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 {
@Override
void apply(Project project) {
//这里只是为了测试,就打印以下
println 'plugin3======='
}
}
里面就写一句话
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
注意,这里注册开源库帐号
注意,这里的邮箱,QQ邮箱和163邮箱都不可以,推荐注册一个gemail(谷歌邮箱,以后用到也方便)
用上面注册的帐号登录到jcenter里面
创建一个仓库
之后,将复制到的key值放在项目中,比如放在gradle.properties中
userkey=这里是私人密码,就不放出来了
之后按照https://github.com/bintray/gradle-bintray-plugin步骤来
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,另一种就是直接用了
收到他的审核通过的邮件之后,直接在项目中
最后在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'
}
}
这里参考的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中直接引用以下就可以了
首先下载: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'
}
}