我正在docker image openjdk:8-jdk-slim中运行服务器。 在该服务器内部,使用spring boot,我从前端收到一个protobuf文件,对其进行编译,然后在运行时将生成的类添加到classpath中。然后,我继续使用Java反射通过Class.forName()方法来获取添加的类。
在docker之外,当在我的PC上运行时,它就像一个吊饰。但是,当我尝试使用方法Class.forName()进行访问时在docker中运行时,使用与不在docker中时使用的相同的类名,则找不到该类。 因为泊坞窗,我缺少某些东西吗?
编辑以获取更多信息:
我正在docker中运行Maven构建。我在此特定操作中拥有的是一个接收字节数组的端点,该字节数组对应于一个protobuf文件。我用此字节数组“构造”一个文件,将其保存在特定的文件夹中。我继续使用protoc编译器进行编译,该编译器会生成一个.java文件,并将其保存在特定的文件夹中。该文件夹对应一个包,我们将其称为“ xxx.yyy.zzz”。 当我尝试将类添加到类路径时,使用以下代码-
File newClass = new File(relativePath);
URL url = newClass.toURI().toURL();
URLClassLoader classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
Method newMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
newMethod.setAccessible(true);
newMethod.invoke(classLoader, url);