2016-04-01 69 views
8

我有我的uploadArhives到Maven存儲庫.aar發佈。Android gradle uploadArchives建設時

但我必須始終從控制檯運行gradlew uploadArhives,如何編寫代碼以便在每個構建或構建版本時調用它?

uploadArchives { 
    repositories { 
     mavenDeployer { 
      def credentials = [ 
        userName: NEXUS_USERNAME, 
        password: NEXUS_PASSWORD 
      ] 
      repository(url: MAVEN_REPO_URL, authentication: credentials) 
      pom.artifactId = 'aaa' 
      pom.version = version 
      pom.packaging = 'aar' 
      pom.groupId = 'bbb' 

     } 
    } 
} 

編輯

正如我認爲,我們可以定義功能:

def uploadToMaven = { 
    uploadArchives 
} 

但如何構造每個執行呢?

+0

你有沒有想過創建travis.ci或其他類型的構建自動化腳本(sh文件)的?當然gradlew或其他終端工具有一個選項來建立應用程序。從那裏開始,就像每次執行這些操作時都運行構建腳本一樣簡單。 –

回答

2

我有一個複雜的項目,有許多模塊和一個主要應用程序。 我在這些模塊中的兩個上添加了「uploadArchives」(因爲是android庫)。通過這種方式,我可以在Maven上發佈我的庫,只需從我的主應用程序運行任務uploadArchives,或者使用gradle並調用此任務「uploadArchives」。

你可以在你的build.gradle(你想發佈的庫)「build.finalizedBy(uploadArchives)」中使用它。

例如:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     minSdkVersion 17 
     targetSdkVersion 23 
     versionCode 2 
     versionName "2.0" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 


    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 

    lintOptions { 
     abortOnError false 
    } 


} 


build.finalizedBy(uploadArchives) 

task wrapper(type: Wrapper) { 
    gradleVersion = "2.8" 
} 

dependencies { 
    compile project(':spfshared') 
    compile 'com.google.code.gson:gson:2.4' 
} 

//task for Sonatype Nexus OSS 
uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(
        url: "${nexusUrl}/content/repositories/releases") { 
       authentication(userName: nexusUsername, password: nexusPassword) 
      } 
      snapshotRepository(
        url: "${nexusUrl}/content/repositories/snapshots") { 
       authentication(userName: nexusUsername, password: nexusPassword) 
      } 

      pom.version = "2.0.0.1" 
      pom.artifactId = "spflib" 
      pom.groupId = "it.polimi.spf" 
     } 
    } 
} 

每次構建之後,uploadArchives將開始。

我試過這個解決方案,它的工作原理。

我也嘗試了一些解決方法,「build.dependsOn myTaskName」沒有成功。如果你想要,你可以嘗試,但在我的AndroidStudio,它的第一個解決方案。 PS:我使用命令「gradlew -q build」測試了我的解決方案,並且還特別從我的Android Studio主模塊(它是我的主應用程序)中運行「build」任務。

如果您想在每個版本中調用「uploadArchives」,只需將「build」替換爲發佈任務即可。

更新: 我也試圖與這些代碼行:

defaultTasks 'uploadArchives' 

clean.finalizedBy(uploadArchives) 
assembleDebug.finalizedBy(uploadArchives) 
assembleRelease.finalizedBy(uploadArchives) 

但有時他們稱之爲「uploadArchives」很多次,我認爲這不是一個好主意。

你所問的是非常具有挑戰性的。我嘗試了一整個小時:)

+0

是的,這個作品很棒!但是當我輸入「gradlew -q build」時它正在工作。 如何在每次構建時上傳工件?當我按下構建或運行按鈕? –

+0

因此,'gradlew -q build'值得打字'gradlew uploadArhives' –

+1

用另一個實驗解決方案更新:) –

2

只是這行添加到您的build.gradle:

build.finalizedBy(uploadArchives) 

這將創建生成任務和uploadArchives任務,這樣uploadArchives被自動調用每次之間的任務相關的構建成功執行。

+0

以及放置在哪裏? 我試過'afterEvaluate {project - >'但是不幫忙 –

+0

試着把它放在build.gradle的根目錄下? – RaGe

+0

我試圖將它放在gradle文件中的任何地方,也放在root中。 –