2014-11-14 44 views
1

背景 我一直都在打造eclipse..it原本不會與內置的gradle一款Android庫項目,並遵循舊的Android文件夾結構上傳日食的Android庫項目到Maven中央

現在爲了上傳它爲maven cental 我首先在sonatype上創建了一個帳戶,然後在jira爲一個新項目創建了一個問題。 他們創造了回購爲我的groupid com.github.amansatija,(爲此我不得不等上兩個工作日,直到問題解決)

現在我創建GPG密鑰對環

後我出口日食的android庫項目與gradle 然後我將它導入到androistudio只是爲了確保它已經成爲完全gradle friendly .. 現在android庫項目的構建系統改爲gradle後,我跟隨克里斯banes在github上的maven-push gradle插件部署我的關於maven的庫項目

以下是gradle我的系統的詳細信息

我的全球gradle.properties文件(一個在user_homer.gradle \ gradle.properties) 包含此

NEXUS_USERNAME=amansatija 
[email protected] 

signing.keyId=16DF7223 
signing.password=customer360 
signing.secretKeyRingFile=mitul_private_key.gpg 

我的項目的 gradle.properties conatins這

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 
    } 
} 

,你可以看到我有它打印的聯繫的用戶名和密碼,劇本似乎找到憑據正確

下面

是我的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乾淨uploadArchives任務,, 一切順利,除了FO r其中它說失敗 訪問的最後一步否認

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產出。屬性文件 當我改變了上述線路將以下

VERSION_NAME=0.0.1 

它的工作似乎都工作正常.. 標籤快照導致我的文物將被部署到快照snotype的回購,而回購快照爲一些理由看起來不看你的文物,我想它只是想要你的應用程序的圖片或快照

回答

0

它看起來像你沒有權限發佈工件com.github.amanasatija組ID在服務器上的工件。

在「社區支持 - 開源項目庫寄存」項目下的https://issues.sonatype.org上爲此提出問題,我們將幫助您解決這個問題。

+0

我發現了sonatype suppor來檢查權限,他說訪問被拒絕會在無效參數通過時發生..我不明白爲什麼shoudl會有無效的參數,除了一件事情,當我查看構建文件夾時,我只看到apk和無arr文件請幫助我 – 2014-11-17 07:35:57