2016-04-01 1 views
8

Ich habe meine uploadArhives zu Maven Repository .aar veröffentlichen.Android Gradle uploadArchives beim Erstellen

Aber ich muss gradlew uploadArhives von der Konsole die ganze Zeit ausführen, wie Code, um es mit jedem Build oder mit Release Build aufzurufen?

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' 

     } 
    } 
} 

EDIT:

Wie ich denke, wir können definieren Funktion:

def uploadToMaven = { 
    uploadArchives 
} 

Aber wie es zur Ausführung mit jeder bauen?

+0

Haben Sie sich Gedanken über eine travis.ci oder eine andere Art von Build-Automatisierung Skript (.sh-Datei) zu erstellen? Sicherlich hat Gradlew oder ein anderes Terminal-Tool eine Option zum Erstellen der App. Von dort aus ist es so einfach, das Build-Skript jedes Mal auszuführen, wenn Sie diese Aktionen ausführen möchten. –

Antwort

2

Ich habe ein komplexes Projekt mit vielen Modulen und einer Hauptanwendung. Ich habe "uploadArchives" auf zwei dieser Module hinzugefügt (weil es Android-Bibliotheken sind). Auf diese Weise kann ich meine Bibliotheken auf Maven veröffentlichen, indem ich einfach die Aufgabe uploadArchives von meiner Hauptanwendung aus laufe oder gradle benutze und diese Aufgabe "uploadArchives" aufruft.

Sie können dies in Ihrem build.gradle (der Bibliothek, die Sie veröffentlichen möchten) "build.finalizedBy (uploadArchives)" verwenden.

Zum Beispiel:

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

Nach jedem Build, uploadArchives werden beginnt.

Ich habe diese Lösung versucht und es funktioniert.

Ich habe auch einige Lösungen mit "build.dependsOn myTaskName" ohne Erfolg versucht. Wenn du willst kannst du es versuchen, aber auf meinem AndroidStudio funktioniert die erste Lösung.

PS: Ich habe meine Lösung mit dem Befehl "gradlew -q build" getestet und auch die Aufgabe "build" von meinem Hauptmodul in Android Studio ausgeführt (das ist meine Hauptanwendung).

Wenn Sie bei jeder Veröffentlichung "uploadArchives" aufrufen möchten, ersetzen Sie einfach "build" durch die Freigabetask.

Update: Ich habe auch versucht, mit diesen Codezeilen:

defaultTasks 'uploadArchives' 

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

Aber manchmal nennen sie „uploadArchives“ viele Male und ich denke, dass es keine gute Idee ist.

Was Sie fragen, sehr anspruchsvoll ist ... Ich habe versucht, für eine ganze Stunde :)

+0

Ja, das funktioniert super! Aber es funktioniert, wenn ich "gradlew -q build" eintippe. Wie kann ich Artefakte mit jedem Build hochladen? Wenn ich Build oder Run-Taste drücke? –

+0

Also 'gradlew -q build' es wert, 'gradlew uploadArhives' –

+1

mit einer anderen experimentellen Lösung aktualisiert :) –

2

einfach diese Zeile in build.gradle hinzu:

build.finalizedBy(uploadArchives) 

Dies schafft eine Aufgabe Abhängigkeit zwischen Build-Task und uploadArchives Aufgabe, so dass uploadArchives automatisch jedes Mal Build erfolgreich ausgeführt aufgerufen wird.

+0

Und wo es zu platzieren? Ich versuchte in 'afterEvaluate {Projekt ->', aber das hilft nicht –

+0

Versuchen Sie es einfach auf der Root-Ebene Ihrer build.gradle platzieren? – RaGe

+0

Ich habe versucht, es überall in Gradle-Datei zu platzieren, auch in root. –