2017-06-13 2 views
0

habe ich die folgende allprojects Richtlinie in meinem Stammprojekt build.gradle Datei:Gradle 3.5 wie jar Basisnamen von archiveBaseName setzen in allproject

allprojects { 

    dependencies { 
     testCompile("junit:junit:${junitVersion}") 
    } 

    jar { 
     baseName = project.archivesBaseName 
     from files(project.subprojects.sourceSets.main.output) 

     manifest { 
      attributes(
        "Created-By": vendor, 
        "Specification-Title": jar.archiveName, 
        "Specification-Version": version, 
        "Specification-Vendor": vendor, 
        "Implementation-Title": jar.baseName, 
        "Implementation-Version" : version, 
        "Implementation-Vendor": vendor, 
      ) 
     } 
    } 

} 

In jedem Teilprojekt I in ihren build.gradle die archiveBaseName neu zu definieren, aber alle Meine JAR-Archive werden mit dem baseName des archiveBaseName des Root-Projekts erstellt.

Gibt es eine Möglichkeit zum dynamischen Erstellen meines Archivnamens Basis auf meiner Überschreibung von archiveBaseName?

Antwort

1

Zu der Zeit, als die allprojects Closure ausgewertet wurde, wurden die Buildscripts der Subprojekte noch nicht ausgewertet und daher wird der überschriebene Wert nicht angezeigt.

Sie müssen die Konfiguration der Jar Aufgabe, die Sie tun, mit afterEvaluate verzögern.

+0

Danke. Kennst du den genauen Synthax? Ich habe es auf andere Weise geschafft, indem ich eine 'gradle.properties' Datei in meinem gesamten Unterprojekt erstellt habe. – BigDong

+0

Natürlich, ich wickle einfach das 'jar {}' in 'afterEvaluate {}' – Vampire

+0

Nun, Sie müssen es in zwei Halbes teilen, eine, die den Basisnamen und eine, die die Manifest-Attribute setzt, sonst wird das Überschreiben nicht Arbeit. – Vampire

Verwandte Themen