Set java.class.path property in runner and loader

#KT-24991 fixed
This commit is contained in:
Ilya Chernikov
2019-08-27 11:23:11 +02:00
parent 08720a3dc6
commit 31c56d7794
6 changed files with 38 additions and 10 deletions
@@ -26,6 +26,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.*;
import java.util.stream.Collectors;
@SuppressWarnings("UseOfSystemOutOrSystemErr")
public class Preloader {
@@ -64,6 +65,8 @@ public class Preloader {
Method mainMethod = mainClass.getMethod("main", String[].class);
Thread.currentThread().setContextClassLoader(preloaded);
String classPathString = options.classpath.stream().map(File::getPath).collect(Collectors.joining(File.pathSeparator));
String savedClasspathProperty = System.setProperty("java.class.path", classPathString);
Runtime.getRuntime().addShutdownHook(
new Thread(new Runnable() {
@@ -79,8 +82,14 @@ public class Preloader {
})
);
//noinspection SSBasedInspection
mainMethod.invoke(0, (Object) options.arguments.toArray(new String[options.arguments.size()]));
try {
//noinspection SSBasedInspection
mainMethod.invoke(0, (Object) options.arguments.toArray(new String[options.arguments.size()]));
}
finally {
if (savedClasspathProperty == null) System.clearProperty("java.class.path");
else System.setProperty("java.class.path", savedClasspathProperty);
}
}
private static ClassLoader createClassLoader(Options options) throws MalformedURLException {