it-swarm.com.ru

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

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

${application.version}

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

14
pas2al

Хорошо, версия печатается, если я собираю проект и запускаю его через 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.

17
Chris Nauroth

В моем случае я заглядываю внутрь манифеста, созданного 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 не с моей идеей

5
bolivier

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

Использование задачи jar у меня не работало в стандартной версии 2.0.5.RELEASE 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} как обычно в своем файле Spring Boot banner.txt .

1
ben3000

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

Используйте плагин ресурсов 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})
0
Nicolas Dos Santos

Для меня работает отлично заменить тексты на 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

0
NotLikeNames

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

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

0
ManjuGH