Версия приложения не отображается в Spring Boot banner.txt

Версия приложения, определенная в файле banner.txt, не отображается на консоли при запуске приложения. Он определяется в соответствии с документами Spring Загрузка

${application.version}

В проекте используется родительский pom spring -boot-starter-parent (базовая настройка проекта из start.spring.io)

Ответ 1

Хорошо, версия печатается, если я собираю проект и запускаю его через Java -jar. Но если я запускаю приложение в моей IDE (IntelliJ IDEA), версия не будет напечатана.

Согласно документации Spring Boot по настройке баннера, значение ${application.version} берется из манифеста jar.

Номер версии вашего приложения, заявленный в файле MANIFEST.MF. Например, Version-Version: 1.0 печатается как 1.0.

При запуске из IDE обычно происходит выполнение файлов классов, скомпилированных IDE. IDE, как правило, не проходит полный цикл сборки всей банки с манифестом. Поэтому во время выполнения не существует файла MANIFEST.MF для замены значения ${application.version}, и у вас остается пустой токен.

Это не ошибка в вашем коде, и вы уже видели, что он работает правильно при полной сборке jar. Если действительно важно исправить это во время работы через IDE, то вы можете рассмотреть возможность создания пользовательского шага сборки, который сначала проходит полную сборку jar и генерацию манифеста. Это, вероятно, излишне, хотя. Баннер может быть проверен позже вне среды IDE путем тестирования реальной сборки jar.

Ответ 2

В моем случае я просматриваю манифест, созданный spring -boot-maven-plugin и внутри не было версии реализации.

Чтобы добавить его, я добавляю плагин maven-jar-plugin в разделе build.plugins моего pom.xml.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
         <archive>
              <manifestEntries>
                    <Implementation-Version>${project.version}</Implementation-Version>
              </manifestEntries>
         </archive>
    </configuration>
</plugin>

После этого, как уже упоминалось ранее, я вижу баннер с версией приложения только тогда, когда я делаю java -jar et not с моим ide

Ответ 3

Для справки, вот что я нашел для командной строки в Spring Boot 2 с проектом на основе Gradle (используя плагин Spring Boot Gradle). Консоль Intellijs по-прежнему не работает для меня, но эта проблема существует уже несколько лет.

Использование задачи jar не работало для меня на стандартной версии build.gradle, поскольку задача bootJar имеет приоритет:

По умолчанию, когда задачи bootJar или bootWar настроены, задачи jar или war отключены.

Поэтому я попробовал задачу bootJar, и он работает:

version = '0.0.1-SNAPSHOT'

bootJar {
    mainClassName = 'com.demo.Application'
    manifest {
        attributes('Implementation-Title':   'Demo Application',
                   'Implementation-Version': version)
    }
}

Примечание. Для mainClassName и его эквивалентов нет необходимости, если у вас есть только один основной класс. Открытый или сконфигурированный основной класс автоматически добавляется в MANIFEST.MF как "Start-Class".

После этого вы можете использовать ${application.title} и ${application.version} как обычно, в файле banner.txt Spring Boot.

Ответ 4

Для меня работы отлично заменяют тексты на mvn build:

com.google.code.maven-заменитель-плагин

  <plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
      <execution>
        <phase>prepare-package</phase>
        <goals>
          <goal>replace</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <file>target/classes/banner.txt</file>
      <replacements>
        <replacement>
          <token>application.title</token>
          <value>${artifactId}</value>
        </replacement>
        <replacement>
          <token>application.version</token>
          <value>${version}</value>
        </replacement>
      </replacements>
    </configuration>
  </plugin>

Да, я удалил $ {} из banner.txt

Ответ 5

Другое решение:

Используйте плагин ресурсов maven для "фильтрации" (замены) свойств в файлах ресурсов.

В pom активируйте фильтрацию ресурсов со следующим определением:

<resources>
    <resource>
        <filtering>true</filtering>
        <directory>src/main/resources</directory>
        <includes>
            <include>application.properties</include>
        </includes>
    </resource>
</resources>

В файле application.properties:

[email protected]@
[email protected]@

В файле banner.txt:

${info.app.name} (${info.app.version})

Ответ 6

В основном значения $ {application.title} $ {application.formatted-version} выбираются из файла манифеста упакованного файла JAR. поэтому я не уверен, что мы действительно сможем напечатать их во время жизненного цикла сборки проекта. введите описание ссылки здесь

Вы можете обратиться ниже пример