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.
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
}
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.
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.
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
}