Maven-publish使用

Gradle 使用 maven-publish 上传 aar 包到 Nexus 私服

在组件化项目架构中每个组件管理我们一般使用分仓库管理,每个组件分别打包成aar包引入项目依赖。老版本 gradle 我们一般使用 maven 插件来上传aar包,而 新版本更新了上传插件为 maven-publish

1
2
3
4
5
6
7
8
9
10
# 低版本使用
apply plugin: 'maven'

# 6.X 以上版本变化
apply plugin: 'maven-publish'


plugins {
id 'maven-publish'
}

如何生成 aar 包

可以在 library 组件下执行 assemble 来生成 aar 包,输出目录为 ++build/outputs/aar++

使用maven-publish 插件

在module下gradle文件加入

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

def GroupId = 'com.zxj.lib'
def ArtifactId = 'custom_lib'
def Version = '1.0.1'

def userName = "admin"
def passWord = "123456"


def releasesRepoUrl = "http://172.18.15.140:8081/repository/custom_host/"


task generateSourcesJar(type:Jar){
from android.sourceSets.main.java.srcDirs
classifier "sources"
}



afterEvaluate {
publishing {
//发布的 arr 包配置
publications{
//名字可以自己指定,如果有多渠道,整段多复制一个
release(MavenPublication){

groupId = GroupId//公司域名
artifactId = ArtifactId//该aar包的名称
version = Version//版本号

// 必须有这个 否则不会上传AAR包
afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
// 多渠道,可以自行指定aar路径
// def projectName = project.getName()
// artifact "build/outputs/aar/${projectName}-release.aar"
// 上传source,这样使用方可以看到方法注释
artifact generateSourcesJar
//依赖关系
pom.withXml{
def dependenciesNode = asNode().appendNode("dependencies")
configurations.implementation.allDependencies.forEach(){
Dependency dependency ->
if (dependency.version != "unspecified" && dependency.name != "unspecified"){
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
}

//仓库地址配置
repositories {
maven {
//允许使用 http
allowInsecureProtocol = true
url = releasesRepoUrl
credentials {
username = userName
password = passWord
}
}
}
}
}

执行 gradle push 发布