webentwicklung-frage-antwort-db.com.de

Die Anwendungsversion wird in Spring Boot banner.txt nicht angezeigt

Die in der banner.txt definierte Anwendungsversion wird beim Ausführen der Anwendung nicht in der Konsole angezeigt. Es ist gemäß den Dokumenten von Spring Boot definiert

${application.version}

Das Projekt verwendet das Spring-Boot-Starter-Parent als übergeordnetes Pom (Grundlegende Projekteinstellungen von start.spring.io )

14
pas2al

Ok, die Version wird gedruckt, wenn ich das Projekt baue und es über Java-Jar laufe. Wenn ich jedoch die Anwendung in meiner IDE (IntelliJ IDEA) starte, wird die Version nicht gedruckt.

Gemäß der Spring Boot-Dokumentation zu Customizing the Banner wird der Wert von ${application.version} aus dem Jar-Manifest übernommen.

Die Versionsnummer Ihrer Anwendung, wie in MANIFEST.MF angegeben. Beispielsweise wird die Implementierungsversion 1.0 als 1.0 gedruckt.

Wenn Sie von einer IDE aus ausführen, wird die Ausführung normalerweise für die von der IDE kompilierten Klassendateien ausgeführt. Die IDE durchläuft normalerweise keinen vollständigen Zyklus, in dem das gesamte Gefäß mit einem Manifest aufgebaut wird. Daher steht zur Laufzeit kein MANIFEST.MF zur Verfügung, um den Wert von ${application.version} zu ersetzen, und es verbleibt das bloße Token.

Dies ist kein Fehler in Ihrem Code, und Sie haben bereits festgestellt, dass er richtig funktioniert, wenn Sie eine vollständige Jar-Erstellung durchführen. Wenn es wirklich wichtig ist, dies zu beheben, während Sie durch die IDE laufen, könnten Sie in Betracht ziehen, einen benutzerdefinierten Build-Schritt einzurichten, der die vollständige Erstellung und Manifest-Generierung von Jar durchläuft. Das ist aber wahrscheinlich übertrieben. Das Banner könnte später außerhalb der IDE validiert werden, indem ein Vergleich mit einem echten Release-Build des Glases durchgeführt wird.

17
Chris Nauroth

In meinem Fall schaue ich in das Manifest, das vom Spring-Boot-Maven-Plugin Erstellt wurde, und darin war keine Implementierungsversion.

Um es hinzuzufügen, füge ich das Plugin maven-jar-plugin im Abschnitt build.plugins meiner pom.xml hinzu. 

<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>

Danach, wie schon erwähnt, kann ich das Banner mit der Applikationsversion nur sehen, wenn ich Java-j et nicht mit meiner Idee mache

5
bolivier

Nur als Referenz, hier ist, was ich gefunden habe für die Befehlszeile in Spring Boot 2 mit einem Gradle-basierten Projekt (mit dem Spring Boot Gradle-Plugin). Die Konsole von Intellij funktioniert immer noch nicht für mich, aber das Problem gibt es schon seit einigen Jahren .

Die jar-Task hat auf einem Standard 2.0.5.RELEASE build.gradle, nicht funktioniert, da die bootJar-Task Vorrang hat

Wenn die BootJar- oder BootWar-Tasks konfiguriert sind, sind die Jar- oder War-Tasks standardmäßig deaktiviert.

Also habe ich die bootJar-Task ausprobiert und es funktioniert:

version = '0.0.1-SNAPSHOT'

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

Hinweis: mainClassName und seine Äquivalente müssen nicht verwendet werden, wenn Sie nur eine Hauptklasse haben. Die erkannte oder konfigurierte Hauptklasse wird automatisch als 'Start-Klasse' zu MANIFEST.MF hinzugefügt.

Sobald dies funktioniert, können Sie ${application.title} und ${application.version} wie üblich in Ihrer Spring Boot banner.txt-Datei verwenden.

1
ben3000

Eine andere Lösung:

Verwenden Sie das Plugin maven resources, um Eigenschaften in Ressourcendateien zu "filtern" (zu ersetzen).

Aktivieren Sie im Pom die Ressourcenfilterung mit der folgenden Definition:

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

In der Datei application.properties:

[email protected]@
[email protected]@

In der Datei banner.txt:

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

Für mich funktionieren perfekt Texte auf mvn build durch:

com.google.code.maven-replacer-plugin

  <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>

Ja, ich habe $ {} aus der banner.txt entfernt

0
NotLikeNames

Grundsätzlich werden die Werte für $ {application.title} $ {application.formatted-version} aus der Manifestdatei der gepackten JAR-Datei ausgewählt. Daher bin ich mir nicht sicher, ob wir sie während des Build-Lebenszyklus des Projekts wirklich drucken können. Linkbeschreibung hier eingeben

sie können sich unter anderem darauf beziehen

0
ManjuGH