David Göransson
David Göransson

Reputation: 173

How do i get jars from manifest's Class-Path-entries

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?

Upvotes: 4

Views: 4473

Answers (2)

David Bullock
David Bullock

Reputation: 6254

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.

Upvotes: 3

user330315
user330315

Reputation:

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

Upvotes: 6

Related Questions