2016-05-06 18 views
1

Ich möchte Release-Management in der Versionskontrolle automatisieren und die damit verbundenen Artefakte veröffentlichen.Gradle dynamische Version für die Veröffentlichung berechnen

Deshalb verwende ich den folgenden Build-Skript (Version zum Testen vereinfachte)

apply plugin: 'java' 
apply plugin: 'maven-publish' 

// --- Setup artifactory server repository --- 
    artifactory_contextUrl="http://vie2rhp02904" 
    artifactory_user="admin" 
    artifactory_password="..." 
    repositories { 
    maven { url "${artifactory_contextUrl}/libs-release" } 
    } 
// ------------------------------------------- 

defaultTasks 'doit' 

group = 'release-test' 

version = "13.7-SNAPSHOT" 

// --- Setup publishing parameters --- 
    publishing.repositories { 
    maven { 
     credentials { 
     username "${artifactory_user}" 
     password "${artifactory_password}" 
     } 
     if (project.version.endsWith('-SNAPSHOT')) { 
     url "${artifactory_contextUrl}/libs-snapshot-local" 
     } else { 
     url "${artifactory_contextUrl}/libs-release-local" 
     } 
    } 
    } 

    project.publishing.publications { 
    mavenJava(MavenPublication) { 
     from components.java 
    } 
    } 
// ------------------------------------------- 

task createReleaseVersion << { 
    println("Version at start: $version") 
    // Doing release management, which builds a tagged version without the "-SNAPSHOT" phrase 
    version = "13.7.0" 
    println("actual version: $version") 
} 

task doit (dependsOn: ['createReleaseVersion', 'publish']) << { 
} 

publish.mustRunAfter createReleaseVersion 

Every so lange gut funktioniert, wie ich nicht in der Ausführung einer Aufgabe, die Version Eigenschaft ändern. (Ist in der createReleaseVersion Aufgabe erledigt)

Wenn ich die Version ändere, wird die JAR-Datei mit dem richtigen Namen erstellt, aber die Veröffentlichung möchte den Namen gemäß der alten Version verwenden.

Wie kann ich mit der während der Ausführung der Aufgabe berechneten Version veröffentlichen?

Antwort

0

Dies passiert, weil publishing konfiguriert ist, bevor Ihre Aufgabe ausgeführt wird.

Ich bin mir nicht sicher, ob es sicher ist, publishing Konfiguration von Ihrer Aufgabe während der Ausführung zu aktualisieren (Sie können versuchen, obwohl). Eine bessere Lösung für dieses Problem wäre die Verwendung von Projektparametern. Zum Beispiel können Sie build.gradle wie folgt ändern:

version = "13.7" 
if (!project.hasProperty('buildRelease')) { 
    version += "-SNAPSHOT"; 
} 

Wenn Sie einfach Ihre Aufgaben ausführen, Version 13.7-SNAPSHOT

wäre aber, wenn Sie Projekt-Eigenschaft buildRelease würde Version 13.7

sein Festlegen der Projekteigenschaft Verwenden Sie -P Präfix, wenn Sie die Aufgabe ausführen, zum Beispiel:

gradle publish -PbuildRelease=true 
+0

T Hanks für deine Antwort, ich weiß, dass der Grund wegen der Reihenfolge der Ausführung ist. Aber ich hoffe, dass es einen Weg gibt. Spätere Konfigurationsbearbeitung ist von Gradle nicht erlaubt. (Habe es schon ausprobiert) Das manuelle Einstellen der Version bringt mich nicht weiter, weil der Hauptgrund dieser Aufgabe darin besteht, die neue Version automatisch zu berechnen. Meine Überwindung im Moment ist die Verwendung einer Batch-Datei, die zweimal aufruft. Beim ersten Mal aktualisiere ich die Versionseigenschaft in der Datei "gradle.properties" und dann mache ich den Rest mit der neuen Version. Aber ich würde es vorziehen, es in einem Anruf zu tun – Horst

+0

@Horst können Sie den Code Ihrer Aufgabe in meine if-Anweisung setzen? Sie können es zu der Frage hinzufügen, damit wir sehen können, was passiert – AdamSkywalker

+0

Sorry, ich weiß nicht, was du meinst? Man kann mein Problem reproduzieren, indem ich "grandle doit" mit meinem Build-Skript anrufe. Es veröffentlicht mit der falschen (ursprünglich eingestellten) Version – Horst

Verwandte Themen