Je cherchais comment obtenir le nom de l'application (id d'artefact) et la version de maven pom ou manifeste lorsque je suis tombé sur cette question Obtenir la version d'artefact Maven au moment de l'exécution .
Ce qui précède fonctionne pour moi lorsque j'emballe le projet, mais je n'arrive pas à faire fonctionner quoi que ce soit lorsque j'essaie d'exécuter le programme à l'aide d'Eclipse. J'ai essayé d'utiliser la méthode .properties lors de la construction, car je supposais que cela ne dépend pas du package, mais je n'obtiens toujours pas de résultat. Si quelqu'un a une idée ou une solution à ce problème, il serait grandement apprécié.
Ma dernière tentative est ci-dessous. Cela utilise le manifeste lorsqu'il est empaqueté (qui fonctionne) et essaie d'obtenir le fichier .properties lors de l'exécution dans Eclipse.
String appVersion = getClass().getPackage().getImplementationVersion();
if(appVersion == null || "".equals(appVersion)) {
appVersion = Glob.getString(appVersion);
if(appVersion == null || "".equals(appVersion)) {
System.exit(0);
}
}
Créer un fichier de propriétés
src/main/resources/project.properties
avec le contenu ci-dessous
version=${project.version}
artifactId=${project.artifactId}
Maintenant, activez filtrage des ressources maven
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
afin que ce fichier soit traité en
target/classes/project.properties
avec un contenu similaire à celui-ci
version=1.5
artifactId=my-artifact
Vous pouvez maintenant lire ce fichier de propriétés pour obtenir ce que vous voulez et cela devrait fonctionner à chaque fois.
final Properties properties = new Properties();
properties.load(this.getClassLoader().getResourceAsStream("project.properties"));
System.out.println(properties.getProperty("version"));
System.out.println(properties.getProperty("artifactId"));