Получить (maven) версию артефакта во время выполнения модульного приложения Java 9+ - PullRequest
1 голос
/ 15 октября 2019

У меня есть приложение Java 11, которое я разрабатываю с использованием Maven, и в pom.xml у меня объявлена ​​версия.

<groupId>my.group.id</groupId>
<artifactId>artifact</artifactId>
<version>0.1.2.3</version>

Я хочу получить эту версию во время выполнения, например, используя getClass().getPackage().getImplementationVersion(), так какописанный в этот вопрос . Это работает до тех пор, пока я не упаковываю свое приложение как модульный образ времени выполнения с использованием Jlink. Тогда я получаю только null, возвращенный из вышеупомянутого вызова.

Я упаковываю свое приложение, используя:

jlink --output target/artifact-image --module-path target/dependencies --launcher MyApp=my.module.name/my.main.Class --add-modules my.module.name

На самом деле Jlink имеет параметр --version, но вместо этого возвращается версия Jlink, устанавливающая егодля сгенерированного артефакта.

Итак, как я могу получить версию (моего проекта Maven) во время выполнения?

  • Как определить ее в модульномПриложение?
  • Как получить его в модульном приложении?
  • Как прочитать его в модульном приложении?

Я знаю, что могу определить его в ресурсефайл и просто прочитайте его оттуда, однако я предпочитаю иметь его только в pom.xml (= иметь единственный источник правды).

...