Как я могу получить банки из записей Class-Path-манифеста - PullRequest
4 голосов
/ 04 января 2011

У меня есть работающая банка с двумя банками в записи Class-Path его файла манифеста:

Class-Path: module1-0.0.1-SNAPSHOT.jar base-0.0.1-SNAPSHOT.jar
Main-Class: test.MySPI

Программа работает нормально, и все зависимости в указанных банках встречаются. Однако, когда я пытаюсь получить доступ к пути к классу, jar-файлы отсутствуют:

String classpath = System.getProperty("java.class.path");
String[] entries = classpath.split(System.getProperty("path.separator"));
for (String entry : entries) {
    System.out.println("Entry: " + entry);
}

Только дает

Entry: .\module2-0.0.1-SNAPSHOT.jar

Есть ли способ получить доступ к фактическому пути к классам, поскольку, очевидно, система находит эти файлы в пути?

Ответы [ 2 ]

5 голосов
/ 04 января 2011

Я думаю, вам нужно будет использовать класс Manifest для чтения в файле MANIFEST.MF и извлечь атрибут Class-Path, используя этот класс

3 голосов
/ 04 января 2011

Вам действительно нужно расположение файлов JAR, или вам просто нужно загрузить ресурсы из них?

Если вы на самом деле просто хотите загрузить ресурсы, вас заинтересует java.lang.ClassLoader, его статический метод getSystemClassLoader() и статический метод java.lang.Thread.currentThread().getContextClassLoader().

Если вы хотите узнать, что они из себя представляют, потому что вы хотите прочитать строку версии с имени файла Jar ... и если они все равно были под вашим контролем ... вы можете использовать Package.getPackage("my.package").getImplementationVersion() и организовать требуемые значения, записанные в Манифесте компонентов jars.

...