Получение версии проекта 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.getClass().getResourceAsStream("project.properties"));
System.out.println(properties.getProperty("version"));
System.out.println(properties.getProperty("artifactId"));