打包aar

maven插件已经过时,官方推荐使用这个插件来实现将我们的代码发布到 Apache Maven仓库的功能。

使用

1
2
3
plugins {
id 'maven-publish'
}

任务 Tasks

所有以下任务都归在名为publishing类型为PublishingExtension的扩展下。

generatePomFileForPubNamePublication

为名为PubName的发布创建一个POM文件,填充已知元数据,如项目名称、项目版本和依赖项。生成的POM文件默认放在*build/publications/$pubName/pom-default.xml*.

publishPubNamePublicationToRepoNameRepository

将名为PubName的发布发布到名为RepoName的存储库中。如果您有一个没有显式名称的存储库定义,那么RepoName将是Maven

publishPubNamePublicationToMavenLocal

PubName发布复制到本地Maven缓存—通常是*$USER_HOME/.m2/repository*——连同发布的POM文件和其他元数据一起。

publish

依赖于所有publishPubNamePublicationToRepoNameRepository任务

将所有已定义的发布发布到所有已定义存储库的聚合任务。它不包括将发布复制到本地Maven缓存。

publishToMavenLocal

依赖于所有publishPubNamePublicationToMavenLocal任务

将所有已定义的发布复制到本地Maven缓存,包括它们的元数据(POM文件等)。

发布 Publications

Maven 发布中的配置主要有四种:

仓库 Repositories

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publishing {
repositories {
maven {
// 基于版本名称选择不同的仓库地址
def releasesRepoUrl = "$buildDir/repos/releases"
def snapshotsRepoUrl = "$buildDir/repos/snapshots"
// url是必须要配置的
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
// 仓库用户名密码
credentials {
username = "root"
password = "root"
}
}
}
}

完整例子

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
apply plugin: 'maven-publish'

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

def versionName = "2.7.0-SNAPSHOT"

publishing {
publications {
// 定义一个名为 Production 的发布
Production(MavenPublication) {
// 使用方引用 implementation 'cn.com.jack:mavendemo:2.7.0-SNAPSHOT'
groupId = "cn.com.jack"
artifactId = "mavendemo"
version = versionName
// 必须有这个 否则不会上传AAR包
afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
// 上传source,这样使用方可以看到方法注释
artifact generateSourcesJar
}
}
repositories {
// 定义一个 maven 仓库
maven {
// 可以有且仅有一个仓库不指定 name 属性,会隐式设置为 Maven
// 根据 versionName 来判断仓库地址
url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL
// 仓库用户名密码
credentials {
username = "root"
password = "root"
}
}
// 定义第二个 maven 仓库,名为 Nexus
maven {
// 必须显示指定 name
name = "nexus"
url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL
}
}
}

Gradle Tool Window中可以看到生成对应的任务。

官方文档 Maven Publish Plugin

  • ./gradlew publishToMavenLocal打包并发布到本地的maven库

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!