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 :)
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. –