web-dev-qa-db-fra.com

Comment obtenir l'attribut de version d'une génération Gradle à inclure dans l'application Swing d'exécution

J'ai un projet parent simple avec des modules/applications. Mon outil de construction préféré est gradle. Le parent build.gradle Est défini ci-dessous.

apply plugin: 'groovy'
dependencies {
    compile gradleApi()
    compile localGroovy()
}


allprojects {
    repositories {
        mavenCentral()
    }

    version "0.1.0-SNAPSHOT"
}

Ce que je voudrais faire, c'est utiliser l'attribut de version (0.1.0-SNAPSHOT) dans mon application swing. Plus précisément, j'aimerais qu'il s'affiche dans la barre de titre du JFrame principal. Je m'attends à pouvoir faire quelque chose comme this.setTitle("My Application - v." + ???.version);

L'application est un simple projet Java Java, mais je ne suis pas opposé à l'ajout d'un support groovy, cela vous aidera.

18
Domenic D.

J'aime créer un fichier de propriétés pendant la construction. Voici un moyen de le faire directement depuis Gradle:

task createProperties(dependsOn: processResources) {
  doLast {
    new File("$buildDir/resources/main/version.properties").withWriter { w ->
        Properties p = new Properties()
        p['version'] = project.version.toString()
        p.store w, null
    }
  }
}

classes {
    dependsOn createProperties
}
26
Craig Trader

Vous pouvez toujours utiliser la force brute comme quelqu'un l'a suggéré et générer un fichier de propriétés pendant la construction. Une réponse plus élégante, qui ne fonctionne que partiellement serait d'utiliser

getClass().getPackage().getImplementationVersion()

Le problème est que cela ne fonctionnera que si vous exécutez votre application à partir du fichier jar généré - si vous l'exécutez directement à partir d'IDE/de classes étendues, getPackage ci-dessus renverra null. C'est assez bon pour de nombreux cas - affichez simplement 'DEVELOPMENT' si vous exécutez à partir d'IDE (obtention d'un package nul) et fonctionnera pour les déploiements de clients réels.

11

La meilleure idée est de conserver la version du projet dans gradle.properties fichier. Toutes les propriétés de ce fichier seront automatiquement chargées et pourront être utilisées dans build.gradle script.

Ensuite, si vous avez besoin de la version dans votre application swing, ajoutez un version.properties fichier sous src/main/resources dossier et filtre ce fichier lors de la construction de l'application, ici est un article qui montre comment cela doit être fait.

version.properties sera inclus dans le bocal final, donc peut être lu et via ClassLoader et les propriétés de ce fichier peuvent être affichées dans l'application.

10
Opal

Solution plus simple et mise à jour de @Craig Trader (prête pour Gradle 4.0/5.0)

task createProperties {
    doLast {
        def version = project.version.toString()
        def file = new File("$buildDir/resources/main/version.txt")
        file.write(version)
    }
}

war {
    dependsOn createProperties
}
2
Topera