一、Publish Plugin To Maven
插件的发布与Android 自定义库的发布相同,主要分为以下几个步骤
1. 注册Maven Central账号
流程网络上很多,不细说了,大致流程就是
- Maven Central上注册一个账号
- Jira 上提交一个问题工单,简单来说就是帮你开辟一块属于你的空间,填写组织名称,项目名称,项目地址等一些信息
- 后续可能对方要验证一下你填写的合法性,例如使用GitHub作为项目仓库,可以会要求你创建一个指定项目进行验证。个人域名的话可能需要在DNS配置一条TXT记录来验证
- 提交的工单被标记为已解决后,表示我们已经有了属于自己的空间
2. 下面是配置发布脚本
以下是一个通用脚本,标记 !!!的是你可能需要修改的地方
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'signing'
task androidSourcesJar(type: Jar) {
archiveClassifier.set("sources")
from android.sourceSets.main.java.source
exclude "**/R.class"
exclude "**/BuildConfig.class"
}
publishing {
publications {
release(MavenPublication) {
def VERSION_NAME = PUBLISH_VERSION_NAME as String
def GROUP_ID = PUBLISH_GROUP_ID as String
println("maven-publish: publish module (${project.getName()}) -> $GROUP_ID : $PUBLISH_ARTIFACT_ID - $VERSION_NAME")
groupId GROUP_ID
artifactId PUBLISH_ARTIFACT_ID
version VERSION_NAME
//以下按需配置
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
artifact androidSourcesJar
pom {
name = PUBLISH_ARTIFACT_ID
description = 'test plugin.' //!!!
url = 'https://github.com/litao0621/MyPlugin' //!!!
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'litao' //!!!
name = 'li tao' //!!!
email = 'onresume@live.com' //!!!
}
}
scm {
connection = 'scm:git@github.com:litao0621/MyPlugin.git' //!!!
developerConnection = 'git@github.com:litao0621/MyPlugin.git' //!!!
url = 'https://github.com/litao0621/MyPlugin/tree/main' //!!!
}
withXml {
def dependenciesNode = asNode().appendNode('dependencies')
project.configurations.implementation.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
repositories {
maven {
name = "MyPlugin" //!!!
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username ossrhUsername
password ossrhPassword
}
}
}
}
signing {
sign publishing.publications
}
注意几点
- 隐私性叫高的尽量配置在个人设备系统目录下的
.gradle
文件夹下的gradle.properties
中避免外泄。例如账号、密码、证书信息等。 - 不涉及隐私的但需要动态配置的可以直接放在项目下或的
gradle.properties文件
,如项目名称,版本等
3. 创建密钥
发布还需要一个密钥,流程网络上也很多,不展开细说,简单介绍下流程
- 先安装一个密钥管理得客户端,这里推荐GPGTools
- 创建一个密钥
- 发布密钥到服务器
4. 打包待发布资源
执行maven-publish
插件中的publishXXX
即可,等待成功看到发布成功的提示
5. 发布项目
登录我们脚本中填写的 仓库管理地址https://s01.oss.sonatype.org
找到对应项目 点击 close
任务完成后再点击 release
即可。
6. 插件引用
到这里就可以引用我们的插件了
1
2
3
4
5
6
7
8
9
10
11
// project/build.gradle
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath("io.github.litao0621:MyPlugin:1.0.0")
}
}
1
2
3
4
//app/build.gradle
plugins {
id("test-plugin")
}