通过 BinTray 将 AAR 部署到 MavenCentral
Posted
技术标签:
【中文标题】通过 BinTray 将 AAR 部署到 MavenCentral【英文标题】:Deploying AAR to MavenCentral through BinTray 【发布时间】:2016-09-16 15:22:04 【问题描述】:我是 android 开发新手,正在尝试通过 BinTray 将一个基本测试库(我正在构建用于学习目的)部署到 JCenter 和 MavenCentral。我已通过 BinTray 成功部署到 JCenter,但未能成功继续部署到 MavenCentral。
以下是我收到的 MavenCentral REST API 错误:
HTTP/1.1 400 Bad Request [messages:[Invalid POM: /pro/johnfoley/androidTesting/testlibrary/1.0.5/testlibrary-1.0.5.pom: Project name missing, Project description missing, Project URL missing, License information missing, SCM URL missing, Developer information missing, Dropping existing partial staging repository.], status:Validation Failed]
11:45:57 AM: External task execution finished 'bintrayUpload'.
这是我的 build.gradle:
apply plugin: 'com.android.library'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
description = 'A test library'
group = 'pro.johnfoley.androidTesting'
version = '1.0.5'
buildscript
repositories
jcenter()
mavenCentral()
apply plugin: 'maven'
apply plugin: 'maven-publish'
android
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
// Generate source JAR
task generateSourcesJar(type: Jar)
from android.sourceSets.main.java.srcDirs
classifier 'sources'
// Generate JavaDocs and JavaDocs JAR
task generateJavadocs(type: Javadoc)
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath()
.join(File.pathSeparator))
task generateJavadocsJar(type: Jar)
from generateJavadocs.destinationDir
classifier 'javadoc'
generateJavadocsJar.dependsOn generateJavadocs
artifacts
archives generateSourcesJar
archives generateJavadocsJar
def bintrayUser = 'BT_USER'
def bintrayApiKey = 'BT_KEY'
def bintrayGPGPassword = 'BT_PW'
def mavenCentralToken = 'MC_TOKEN'
def mavenCentralPassword = 'MC_PW'
// BinTray config
bintray
user = bintrayUser
key = bintrayApiKey
pkg
repo = 'maven'
name = 'pro.johnfoley.androidTesting.testlibrary'
desc = ''
licenses = ['Apache-2.0']
vcsUrl = 'https://github.com/johnlfoleyiii/androidTesting.git'
issueTrackerUrl = 'https://github.com/johnlfoleyiii/androidTesting/issues'
websiteUrl = 'https://github.com/johnlfoleyiii/androidTesting'
labels = []
publicDownloadNumbers = true
version
name = '1.0.5-testlibrary'
desc = 'My test library'
released = new Date()
vcsTag = 'v1.0'
gpg
sign = true
passphrase = bintrayGPGPassword
mavenCentralSync
sync = true //Optional (true by default). Determines whether to sync the version to Maven Central.
user = mavenCentralToken
password = mavenCentralPassword
close = '1' //Optional property. By default the staging repository is closed and artifacts are released to Maven Central. You can optionally turn this behaviour off (by puting 0 as value) and release the version manually.
configurations = ['archives']
这是从 build.gradle 生成的 POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>pro.johnfoley.androidTesting</groupId>
<artifactId>testlibrary</artifactId>
<version>1.0.5</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>appcompat-v7</artifactId>
<version>23.4.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
如何配置 build.gradle 以通过 BinTray 成功部署到 MavenCentral?
【问题讨论】:
【参考方案1】:我使用 Bintray 将我的一些库上传到 Maven 中心。我使用 Novoda's
bintray-release
库来创建 pom 并将库上传到 Bintray。
您可以按照bintray-release
插件的项目设置进行操作,例如:RxAnimationBinding。
在为bintray-upload
进行类比项目设置后,您可以将库上传到 Bintray(确保将dryRun
设置为false
以进行真正的上传):
./gradlew clean build bintrayUpload
上传的 repo 必须使用您的 GPG 密钥进行签名。为此,您必须:
-
在
Bintray
配置文件设置中设置您的 GPG 公钥:
-
从这些设置中获取 API 密钥:
-
正确调用 Bintray api(我为此使用 Postman 应用)
之后你可以将你的 repo 同步到 Maven
【讨论】:
我已经在 BinTray 中存储了我的 GPG 密钥和 sonatype 令牌/密码。我在创建 MavenCentral 可以接受的 POM 时遇到问题 试试bintray-release
插件和我的库中的项目设置。它有效以上是关于通过 BinTray 将 AAR 部署到 MavenCentral的主要内容,如果未能解决你的问题,请参考以下文章