Docker Class.forName找不到类

时间:2018-08-10 10:25:35

标签: java class docker reflection classpath

我正在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); 
  • 我向.class文件提供了relativePath,但未将其添加到类路径中。我知道.class文件是用正确的方式生成的,并保存在特定的文件夹中。

0 个答案:

没有答案