build: 增加 open url module 配置
This commit is contained in:
parent
dc803f430a
commit
42050c45d9
|
@ -0,0 +1,41 @@
|
|||
package io.metersphere.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URLClassLoader;
|
||||
|
||||
@Configuration
|
||||
public class OpenUrlClassLoaderModule {
|
||||
|
||||
static {
|
||||
// If on Java 9+, open the URLClassLoader module to this module
|
||||
// so we can access its API via reflection without producing a warning.
|
||||
try {
|
||||
openUrlClassLoaderModule();
|
||||
} catch (Throwable e) {
|
||||
// ignore exception - will throw on Java 8 since the Module classes don't exist
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static void openUrlClassLoaderModule() throws Exception {
|
||||
// This is effectively calling:
|
||||
//
|
||||
// URLClassLoader.class.getModule().addOpens(
|
||||
// URLClassLoader.class.getPackageName(),
|
||||
// ReflectionClassLoader.class.getModule()
|
||||
// );
|
||||
//
|
||||
// We use reflection since we build against Java 8.
|
||||
|
||||
Class<?> moduleClass = Class.forName("java.lang.Module");
|
||||
Method getModuleMethod = Class.class.getMethod("getModule");
|
||||
Method addOpensMethod = moduleClass.getMethod("addOpens", String.class, moduleClass);
|
||||
|
||||
Object urlClassLoaderModule = getModuleMethod.invoke(URLClassLoader.class);
|
||||
Object thisModule = getModuleMethod.invoke(OpenUrlClassLoaderModule.class);
|
||||
|
||||
addOpensMethod.invoke(urlClassLoaderModule, URLClassLoader.class.getPackage().getName(), thisModule);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue