Я хочу запустить подпроцесс java с тем же путем классов Java и динамически загружаемыми классами, что и текущий процесс java. Следующего недостаточно, потому что оно не включает динамически загружаемые классы:
String classpath = System.getProperty("java.class.path");
В настоящее время я ищу каждый необходимый класс с кодом ниже. Однако на некоторых машинах это не работает для некоторых классов / библиотек, исходная переменная равна нулю. Есть ли более надежный и простой способ получить расположение библиотек, которые используются текущим процессом jvm?
String stax = ClassFinder.classPath("javax.xml.stream.Location");
public static String classPath(String qualifiedClassName) throws NotFoundException {
try {
Class qc = Class.forName( qualifiedClassName );
CodeSource source = qc.getProtectionDomain().getCodeSource();
if ( source != null ) {
URL location = source.getLocation();
String f = location.getPath();
f = URLDecoder.decode(f, "UTF-8"); // decode URL to avoid spaces being replaced by %20
return f.substring(1);
} else {
throw new ClassFinder().new NotFoundException(qualifiedClassName+" (unknown source, likely rt.jar)");
}
} catch ( Exception e ) {
throw new ClassFinder().new NotFoundException(qualifiedClassName);
}
}