Получение версии проекта maven и идентификатора артефакта от pom во время работы в Eclipse

Я искал, как получить имя приложения (идентификатор артефакта) и версию из maven pom или манифеста, когда натолкнулся на этот вопрос Получить версию артефакта Maven во время выполнения.

Вышесказанное работает для меня, когда я упаковываю проект, но у меня не получается заставить работать что-либо, когда я пытаюсь запустить программу с помощью eclipse. Я пытался использовать метод.properties при сборке, так как предполагал, что это не зависит от пакета, но я все еще не получаю результат. Если у кого-то есть идея или решение этой проблемы, это будет с благодарностью.

Моя последняя попытка ниже. Он использует манифест, когда упакован (что работает) и пытается получить файл.properties при запуске в eclipse.

String appVersion = getClass().getPackage().getImplementationVersion();
    if(appVersion == null || "".equals(appVersion)) {
        appVersion = Glob.getString(appVersion);
        if(appVersion == null || "".equals(appVersion)) {
            System.exit(0);
        }
    }

1 ответ

Решение

Создать файл свойств

src/main/resources/project.properties

с содержанием ниже

version=${project.version}
artifactId=${project.artifactId}

Теперь включите maven фильтрацию ресурсов

  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>

так что этот файл обрабатывается в

target/classes/project.properties

с некоторым содержанием, похожим на это

version=1.5
artifactId=my-artifact

Теперь вы можете прочитать этот файл свойств, чтобы получить то, что вы хотите, и это должно работать каждый раз.

final Properties properties = new Properties();
properties.load(this.getClassLoader().getResourceAsStream("project.properties"));
System.out.println(properties.getProperty("version"));
System.out.println(properties.getProperty("artifactId"));

Простое решение с maven 4 теперь - добавить VersionUtil статический метод в вашем пакете:

package my.domain.package;
public class VersionUtil {
  public static String getApplicationVersion(){
    String version = VersionUtil.class.getPackage().getImplementationVersion();
    return (version == null)? "unable to reach": version;
  }
}

Дело в том, что вам нужен этот плагин "mave-war-plugin" в помпе проекта, говорящий, что вы хотите добавить addDefaultImplementationEntries:

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
     ...
      <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <archive>
                    <manifest>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    ...

Затем позвоните в VersionUtil.getApplicationVersion() из какого-то места в вашем коде.

Другие вопросы по тегам