Android - 多个 AAR 变体 Nexus 上传
Android - multiple AAR variant Nexus upload
我有一个结构如下所示的项目。它有一个“main-module
”,这是我们开发的重点,它应该能够将两个变体(调试、发布)的 AAR 发布到 Nexus。我们还有一堆其他依赖模块和一个测试应用程序。
project
|
|- app
|- main-module
|- module-a
|- module-b
...
我正在寻找 运行 一个构建,它将打包 main-module
AAR,然后将它们上传到 Nexus 存储库。调试 AAR 将转到快照存储库,发布版本将转到发布存储库。我有一些拼图,但我不太确定如何将它们拼在一起。
我有:
构建 AAR
gradlew assemble
发布 AAR
project.uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {
authentication(userName: "deployment", password: "password123")
}
pom.version = "0.0.1-SNAPSHOT"
pom.artifactId = "MainModule"
pom.groupId = "com.myorg.test"
}
}
构建成功,我可以将一个版本推送到 Nexus。我不知道如何为调试和发布版本提供配置,以便它们具有正确的存储库(例如 /snapshots
与 /release
)和正确的版本(发布版本名称不包含 SNAPSHOT
).
一旦开始工作,我会将名称、版本和凭据移出到属性中,在有人指出之前,凭据不会签入源代码管理。
使用:
- gradle-包装器 4.4
- gradle插件3.1.4
经过几天的深入研究,我找到了解决方案。这很粗糙,我还没有优化它,但解决方案有效。请注意,它假设您的 aar 文件在名称中包含文本 'debug' 和 'release',如果它们不包含文本,那么您可以根据您的项目进行调整。我不知道这如何适用于不仅仅具有调试和发布变体的模块,或者是否涉及产品风格。
android-maven-gradle-插件
整合android-maven-gradle-plugin。步骤在文档中 link.
模块build.gradle
apply plugin: 'com.github.dcendents.android-maven'
afterEvaluate {
uploadArchives {
repositories {
mavenDeployer {
addFilter('debug') { artifact, file ->
artifact.name.contains("debug")
}
addFilter('release') { artifact, file ->
artifact.name.contains("release")
}
pom('debug').groupId = 'com.yourgroup'
pom('release').groupId = 'com.yourgroup'
pom('debug').artifactId = "MyArtifact"
pom('release').artifactId = "MyArtifact"
pom('debug').version = android.defaultConfig.versionName + "-SNAPSHOT"
pom('release').version = android.defaultConfig.versionName
pom.packaging = 'aar'
repository(url: "http://localhost:8081/nexus/content/repositories/releases/") {
authentication(userName: 'user'), password: 'pwd')
}
snapshotRepository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {
authentication(userName: 'user'), password: 'pwd')
}
}
}
}
}
我有一个结构如下所示的项目。它有一个“main-module
”,这是我们开发的重点,它应该能够将两个变体(调试、发布)的 AAR 发布到 Nexus。我们还有一堆其他依赖模块和一个测试应用程序。
project
|
|- app
|- main-module
|- module-a
|- module-b
...
我正在寻找 运行 一个构建,它将打包 main-module
AAR,然后将它们上传到 Nexus 存储库。调试 AAR 将转到快照存储库,发布版本将转到发布存储库。我有一些拼图,但我不太确定如何将它们拼在一起。
我有:
构建 AAR
gradlew assemble
发布 AAR
project.uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {
authentication(userName: "deployment", password: "password123")
}
pom.version = "0.0.1-SNAPSHOT"
pom.artifactId = "MainModule"
pom.groupId = "com.myorg.test"
}
}
构建成功,我可以将一个版本推送到 Nexus。我不知道如何为调试和发布版本提供配置,以便它们具有正确的存储库(例如 /snapshots
与 /release
)和正确的版本(发布版本名称不包含 SNAPSHOT
).
一旦开始工作,我会将名称、版本和凭据移出到属性中,在有人指出之前,凭据不会签入源代码管理。
使用:
- gradle-包装器 4.4
- gradle插件3.1.4
经过几天的深入研究,我找到了解决方案。这很粗糙,我还没有优化它,但解决方案有效。请注意,它假设您的 aar 文件在名称中包含文本 'debug' 和 'release',如果它们不包含文本,那么您可以根据您的项目进行调整。我不知道这如何适用于不仅仅具有调试和发布变体的模块,或者是否涉及产品风格。
android-maven-gradle-插件
整合android-maven-gradle-plugin。步骤在文档中 link.
模块build.gradle
apply plugin: 'com.github.dcendents.android-maven'
afterEvaluate {
uploadArchives {
repositories {
mavenDeployer {
addFilter('debug') { artifact, file ->
artifact.name.contains("debug")
}
addFilter('release') { artifact, file ->
artifact.name.contains("release")
}
pom('debug').groupId = 'com.yourgroup'
pom('release').groupId = 'com.yourgroup'
pom('debug').artifactId = "MyArtifact"
pom('release').artifactId = "MyArtifact"
pom('debug').version = android.defaultConfig.versionName + "-SNAPSHOT"
pom('release').version = android.defaultConfig.versionName
pom.packaging = 'aar'
repository(url: "http://localhost:8081/nexus/content/repositories/releases/") {
authentication(userName: 'user'), password: 'pwd')
}
snapshotRepository(url: "http://localhost:8081/nexus/content/repositories/snapshots/") {
authentication(userName: 'user'), password: 'pwd')
}
}
}
}
}