I have a runnable jar with two jars in the Class-Path entry of its manifest file:
Class-Path: module1-0.0.1-SNAPSHOT.jar base-0.0.1-SNAPSHOT.jar
Main-Class: test.MySPI
The program runs fine and all dependencies in the referenced jars are met. However, when I try to access the class path, the jars are not there:
String classpath = System.getProperty开发者_高级运维("java.class.path");
String[] entries = classpath.split(System.getProperty("path.separator"));
for (String entry : entries) {
System.out.println("Entry: " + entry);
}
Only gives
Entry: .\module2-0.0.1-SNAPSHOT.jar
Is there a way of accessing the actual classpath, since obviously, the system finds those jars on the path?
I think you will need to use the Manifest class to read in the MANIFEST.MF file and extract the Class-Path attribute using that class
Do you actually need the location of the JAR files, or do you just need to load resources from them?
If you actually just want to load resources, you'll be interested in java.lang.ClassLoader
, its static getSystemClassLoader()
method, and the static java.lang.Thread.currentThread().getContextClassLoader()
method.
If you wanted to find what they were because you wanted to read the version string off the Jar file name ... and if they were under your control anyhow ... you might want to use Package.getPackage("my.package").getImplementationVersion()
and organise to have the required values written into the Manifest of the component jars.
精彩评论