"Implementation-Version" aus Manifest auslesen

dermoritz

Bekanntes Mitglied
Ich habe Maven dazu gebracht unter anderem die aktuelle Projektversion ins Mainfest zu schreiben - in meinem Fall ist es eine Web-App:

java - How to get Maven Artifact version at runtime? - Stack Overflow

nur funktioniert der dort beschriebene Weg die Version auszulesen nicht - getImplementationVersion() liefert null.
Was mich stutzig macht ist, dass getImplementationVersion() nicht statisch ist sondern relative zur Klasse/zum Paket aus dem es aufgerufen wird.

Wie lese ich also die Version aus bzw. wie Rufe ich getImplementationVersion() statisch/unabhängig von der Klasse auf?

Wobei ich das auch versucht habe: Package.getPackage("de.dies.das").getImplementationVersion(). "de.dies.das" hab ich mir von Maven auch in die Manifestdatei eintragen lassen - per <packageName/>. Aber damit gibt getPackage null zurück.
 

dermoritz

Bekanntes Mitglied
derzeit sieht die manifest-Datei so aus:

Code:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: STL1335
Build-Jdk: 1.6.0_31
Specification-Title: xxx
Specification-Version: 1.1.0-SNAPSHOT
Specification-Vendor: xxx
Implementation-Title: xxx
Implementation-Version: 1.1.0-SNAPSHOT
Implementation-Vendor-Id: xxx
Implementation-Vendor:xxx

Die Frage wäre ob ich an die Version per get...Version rankomme. Falls es nur so geht wie du schreibst kama (Datei einlesen), dann nützt es mir eigentlich nix. Ich lese ja eine Konfigurationsdatei ein, dort ein "Version=${project.version} hinzufügen wäre ein leichtes.
Ich dachte halt der Standardweg eine Version zu hinterlegen ist das Manifest und für das Auslesen gibt es die get...Version-Methoden. Aber wenn die Methoden unnütz sind muss ich auch das Manifest nicht benutzen.
 

kama

Top Contributor
Hi,

derzeit sieht die manifest-Datei so aus:
.....Falls es nur so geht wie du schreibst kama (Datei einlesen), dann nützt es mir eigentlich nix.
Das ist eine Resource, da diese ja innerhalb des JAR's liegt und nicht auf dem Dateisystem...

Unter META-INF/maven/${groupId}/${artifactId}/pom.properties
findest auch eine entsprechende Datei die das schon beinhaltet...Das Teil muss dann aber auch als Resource gelesen werden, da es ja im JAR bzw. WAR file verpackt ist...

Gruß
Karl-Heinz Marbaise
 

dermoritz

Bekanntes Mitglied
oder anders gesagt:
Das
Code:
<archive>
						<manifest>
							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
							<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
							<packageName/>
						</manifest>
					</archive>
bringt eigentlich nichts - nur eine weitere Datei in der unter anderem die Version steht. In meinem Fall lese ich ja breits eine Resource - die Propertiesdatei. Nun steht da wie erwähnt version=${project.version} und die Sache ist erledigt.
 

darekkay

Bekanntes Mitglied
So hier geht's bei mir:
[XML]<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.main.class.Main</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>[/XML]
Dies erzeugt die entsprechenden Informationen im Manifest:
(...)
Implementation-Title: xxx
Implementation-Version: xxx
Implementation-Vendor-Id: xxx
Built-By: xxx
Build-Jdk: 1.7.0
Specification-Title: xxx
Specification-Version: xxx
Main-Class: my.main.class.Main
(...)

Nun kann ich problemlos auf die Informationen zugreifen:
Java:
getClass().getPackage().getImplementationTitle()

Was du eventuell nicht beachtest: wenn du nun das Programm mit Eclipse startest, werden die Informationen natürlich nicht sichtbar. Nach einem Maven-Build-Vorgang kann ich aber in der erstellten jar-Datei die gewünschten Infos sehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Gradle kann Lottie Implementation nicht finden Tools - Maven, Gradle, Ant & mehr 5
sascha-sphw Packr -> Implementation of JAXB-API has not been found Tools - Maven, Gradle, Ant & mehr 0
H Maven build.plugins.plugin.version fehlt Tools - Maven, Gradle, Ant & mehr 0
parax Fatal error compiling: error: release version 17 not supported Tools - Maven, Gradle, Ant & mehr 25
P Maven Wie die Maven Project version in JSP page verwenden? Tools - Maven, Gradle, Ant & mehr 2
D Maven Abhängigkeiten überprüfen auf Kompatibilität mit einer anderen Java-Version Tools - Maven, Gradle, Ant & mehr 11
Neumi5694 Ant - javac Version Tools - Maven, Gradle, Ant & mehr 4
S New version released: Java Switcher for 1.8.0_112 and Windows x64 only Tools - Maven, Gradle, Ant & mehr 4
schlingel Applet Java-Sicherheitswarnung wegen alter JRE-Version Tools - Maven, Gradle, Ant & mehr 13
B Buckminster: Plugin Version in Java source File einfügen Tools - Maven, Gradle, Ant & mehr 4
H WebStart-Probleme mit JRE Version 1.6.0_18 Tools - Maven, Gradle, Ant & mehr 1
algorismi Webstart: neue Version der Anwendung Tools - Maven, Gradle, Ant & mehr 4
U Java Webstartproblem ab Version 1.6_11 Tools - Maven, Gradle, Ant & mehr 7
T Jar erstellen mit Build Version? Tools - Maven, Gradle, Ant & mehr 2
N Java Runtime -> Version erzwingen Tools - Maven, Gradle, Ant & mehr 17
U Java Version Tools - Maven, Gradle, Ant & mehr 4
G datei von server lesen - falsche version Tools - Maven, Gradle, Ant & mehr 2
G Applet braucht eine bestimmte Plugin-Version Tools - Maven, Gradle, Ant & mehr 11
N No Main Manifest Attribute trotz Eintrag bei Gradle Tools - Maven, Gradle, Ant & mehr 1
H Maven NetBeans Java Application ohne Manifest-Datei Tools - Maven, Gradle, Ant & mehr 7
AlexSpritze Ant Frage zu manifest-class-path mit Target jar Tools - Maven, Gradle, Ant & mehr 1
ruutaiokwu manifest.mf - wie libraries einbinden? Tools - Maven, Gradle, Ant & mehr 7
G Classpath in Manifest? Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen

Neue Themen


Oben