I've been working on this for a while and tried every possible solution on here, but nothing seems to works. Apparently, I couldn't find anyone having the same problem on here as well. Please help :)
Every time I use .getPackage().getImplementationVersion()
, my program is not returning my implementation version from my pom.xml or MANIFEST.MF but the java version of the running VM. This happens for both the workspace as well as the final jar. The manifest-file seems to be just fine. At first, I thought it takes the Build-Jdk from the manifest, but no, it actually dynamically gets the running java version.
I know there is an option to get the version by reading through the pom (even though I have not tried that yet), but I really would appreciate to have this code get going somehow.
I built a minimum reproducible example with JavaFX, the desired version is written into the title of the popup window.
I'm using Java Zulu 8 and Maven 3.3.9 on Eclipse Oxygen atm.
App.java
# import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
public class App extends Application {
public static void main(String\[\] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
Scene scene = new Scene(new AnchorPane());
stage.setScene(scene);
stage.setTitle(App.class.getClass().getPackage().getImplementationVersion());
stage.show();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.xyz.TestVersion</groupId>
<artifactId>VersionTester</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>VersionTester</name>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<!-- main class -->
<mainClass>App</mainClass> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
MANIFEST.MF that is being created in the JAR-file
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.8.0_322
Specification-Title: VersionTester
Specification-Version: 0.0.1-SNAPSHOT
Implementation-Title: VersionTester
Implementation-Version: 0.0.1-SNAPSHOT
Implementation-Vendor-Id: de.xyz.TestVersion
Main-Class: App
already tried:
getPackage().getImplementationVersion()
getPackage().getSpecificationVersion()
tried both in different classes in different packages of the project, ultimately in the Main-Class
tried maven-jar-plugin instead of maven-assembly-plugin