web-dev-qa-db-fra.com

Obtention de la version du projet maven et de l'ID d'artefact à partir de pom lors de l'exécution dans Eclipse

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);
        }
    }
27
swhite

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"));
74
coderplus