Как определить версию jar при запуске - PullRequest
0 голосов
/ 27 февраля 2019

Есть ли способ добавить некоторую информацию в jar во время компиляции.И просмотрите эту информацию во время выполнения, чтобы узнать, какой jar-файл выполняется.

Мой сценарий состоит в том, что я создаю jar-файл с фиксированным именем jar и отправляю его для запуска на другом компьютере.Однако иногда случается так, что, похоже, работает старая версия jar.Есть ли способ идентифицировать его без необходимости изменения имени файла JAR и предоставления информации во время компиляции.Я не могу изменить код Java каждый раз, но могу сделать один раз, если потребуется.

1 Ответ

0 голосов
/ 27 февраля 2019

Чтобы получить версию из фляги, используйте:

OneOfYourClasses.class.getPackage().getImplementationVersion();

Это предполагает, что вы установили версию реализации в MANIFEST.MF, что вы можете сделать во время сборки.Это может включать дату.

С Maven maven-shade-plugin может сделать это для вас с преобразователем ManifestResourceTransformer (я просто использую версию из pom здесь):

<manifestEntries>
      <Implementation-Title>${project.artifactId}</Implementation-Title>
      <Implementation-Version>${project.version}</Implementation-Version>
</manifestEntries>

Должен быть подобный плагин для gradle.

EDIT: Gradle делает это еще проще (из https://docs.gradle.org/current/userguide/java_plugin.html):

jar {
    manifest {
        attributes("Implementation-Title": "YourJarName",
                   "Implementation-Version": version)
    }
}

EDIT: если вы работаете в Linux, вы можете увидеть версию изкомандная строка с:

unzip -p yourfile.jar META-INF/MANIFEST.MF | grep Implementation-Version
...