2016-06-05 47 views
7

Domyślnie wszystkie projekty gradle java mają właściwość version. Zazwyczaj wygląda to mniej więcej tak:Gradle: Udostępnij wersję kompilacji dla Javy

allprojects { 
    apply plugin: 'java' 
    // ... 

    // configure the group and version for this project 
    group = 'org.example' 
    version = '0.2-SNAPSHOT' 
} 

Czy istnieje sposób, aby „wersja” Właściwość Zdefiniowane tu dostępne dla wbudowanego kodu java? Co chciałbym mieć to klasa tak w projekcie:

public class BuildVersion { 

    public static String getBuildVersion(){ 
     return // ... what was configured in gradle when project was built 
    } 

} 

sobie wyobrazić, że można to zrobić za pośrednictwem jakiejś generacji kodu źródłowego. Lub pozwalając gradle napisać zmienną do jakiegoś rodzaju pliku konfiguracyjnego w src/main/resources. Czy istnieje sposób "standardowy" (to jest ogólnie przyjęty) w Gradle?

Odpowiedz

20

Zakładając skrypt Gradle wstawia version do słoika oczywistego poprawnie, jak pokazano here:

version = '1.0' 
jar { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Quickstart', 
        'Implementation-Version': version 
    } 
} 

Twój kod będzie mógł odebrać wersję z tym słoik pliku manifestu:

public class BuildVersion { 

    public static String getBuildVersion(){ 
     return BuildVersion.class.getPackage().getImplementationVersion(); 
    } 

} 

Alternatywnie, napisz zadanie Gradle, aby utworzyć plik właściwości z wersją w nim zawartą, i dołącz ten wygenerowany plik właściwości do pliku jar, a następnie uzyskaj do niego dostęp za pomocą getResouceAsStream().

Można oczywiście wygenerować plik BuildVersion.java z zadania Gradle, z wersją osadzoną bezpośrednio jako literał łańcuchowy i upewnić się, że zadanie jest uruchamiane przed zadaniem compile.

Ale proponuję użyć tylko numeru wersji, który zamierzasz dołączyć (plik manifestu), który ma pełne wsparcie zarówno od Gradle'a do pisania, jak i Java Runtime do czytania, bez żadnego niestandardowego zadania Gradle lub Javy czytanie pliku.

+0

Dzięki za wyczerpującą odpowiedź, naprawdę dobrze jest wiedzieć! – Alan47

+1

Upewnij się, że paczka znajduje się tylko w jednym słoiku: https://stackoverflow.com/questions/38204059/how-to-obtain-a-package-version-from-the-jar-manifest-using-the-getimplementa/ 47442055 # 47442055 – Tom

Powiązane problemy