【发布时间】:2026-01-30 23:40:01
【问题描述】:
背景 我一直在eclipse中构建一个android库项目。它最初不是用gradle构建的,而是遵循旧的android文件夹结构
现在为了将它上传到 maven cental 我首先在 sonatype 上注册了一个帐户,然后在 jira 上为一个新项目创建了一个问题。 他们为我的 groupid com.github.amansatija 创建了一个 repo,(为此我等了两个工作日才解决问题)
现在我创建了 gpg 密钥对环
之后我用 gradle 导出了 eclipse android 库项目 然后我将它导入 androistudio 只是为了确保它变得完全对 gradle 友好.. 现在,在将 android 库项目的构建系统更改为 gradle 之后,我在 github 上跟随 chris banes maven-push gradle 插件在 maven 上部署我的库项目
下面是 gradle my system 的详细信息
我的全局 gradle.properties 文件(位于 user_homer.gradle\gradle.properties 的那个) 包含这个
NEXUS_USERNAME=amansatija
NEXUS_PASSWORD=mushROOM@7
signing.keyId=16DF7223
signing.password=customer360
signing.secretKeyRingFile=mitul_private_key.gpg
我的项目 gradle.properties 包含这个
VERSION_NAME=0.0.1-SNAPSHOT
VERSION_CODE=1
GROUP=com.github.amanasatija
POM_DESCRIPTION=A demo test lib to understand maven central uploads
POM_URL=https://github.com/amansatija/Cus360MavenCentralDemoLib
POM_SCM_URL=https://github.com/amansatija/Cus360MavenCentralDemoLib
POM_SCM_CONNECTION==https://github.com/amansatija/Cus360MavenCentralDemoLib.git
POM_SCM_DEV_CONNECTION==https://github.com/amansatija/Cus360MavenCentralDemoLib.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=amansatija
POM_DEVELOPER_NAME=Aman Satija
我的项目的 maven_push 文件包含以下内容
/*
* Copyright 2013 Chris Banes
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
apply plugin: 'maven'
apply plugin: 'signing'
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
}
def getReleaseRepositoryUrl() {
return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
: "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
}
def getSnapshotRepositoryUrl() {
return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
: "https://oss.sonatype.org/content/repositories/snapshots/"
}
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
println(NEXUS_PASSWORD)
println(NEXUS_USERNAME)
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url: getReleaseRepositoryUrl()) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
snapshotRepository(url: getSnapshotRepositoryUrl()) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
pom.project {
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
url POM_URL
scm {
url POM_SCM_URL
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
}
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
}
}
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
}
}
}
}
}
}
signing {
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
}
如您所见,我让它打印 nexus 用户名和密码,脚本似乎已正确找到凭据
下面是我的 lib 模块的 build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
apply plugin: 'com.android.library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
compileSdkVersion 21
buildToolsVersion "21.0.1"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
apply from: '../maven_push.gradle'
下面也是我的库模块的 gradle.properties 文件
POM_NAME=DemoLibMavenCentral
POM_ARTIFACT_ID=DemoLibMavenCentral
POM_PACKAGING=aar
如您所见,我已适当地遵循了 turoial 但是,当我执行 gradlew clean uploadArchives 任务时, 一切都很顺利,除了说失败的最后一步 访问被拒绝
What went wrong:Execution failed for task ':DemoLibManvenCentral:uploadArchives'.Could not publish configuration 'archives'
Error deploying artifact 'com.github.amanasatija:library:apk':
Error deploying artifact: Authorization failed: Access denied to: https://oss.sonatype.org/content/repositories/snapshots/com/github/amanasatija/library/0.0.1-SNAPSHOT/library-0.0.1-20141114.123550-1.apk
帮帮我...请...
编辑
解决方案::
所以我终于设法解决了这个问题。 显然问题是
VERSION_NAME=0.0.1-SNAPSHOT
在我项目的 gradle.properties 文件中 当我将上面的行更改为以下
VERSION_NAME=0.0.1
它似乎工作正常.. 标签 SNAPSHOT 导致我的工件被部署到 snotype 的快照存储库中,并且由于某种原因快照存储库似乎不适合您的工件,我想它只是想要您的应用程序的图片或快照
【问题讨论】:
标签: gradle android-library aar maven-central