Java URLClassLoader 在 eclipse 中有效,但在 cmd 中无效
Java URLClassLoader works in eclipse but not in cmd
我有一个程序尝试使用 URLClassLoader 从文件夹加载 java 类。类加载器能够在 Eclipse 中加载 运行 时加载 类,但是当我尝试在 cmd 中加载 运行 它时,它会抛出 ClassNotFoundException。
文件结构:
-rootFolder/
-src/
-tests/
-test1/
-A.java
该程序有两个参数:args[0] 根文件夹的绝对路径和 args[1] 要读取的测试文件夹的名称。
String rootString = args[0]+ File.separator + "tests" + File.separator + args[1] + File.separator;
File folder = new File(rootString);
String[] files = folder.list();
我可以使用此路径在eclipse 和cmd 中获取文件名。
然后我有我的 URLClassLoader。
URL[] urls = new URL[] {new File(rootString).toURI().toURL()};
URLClassLoader cl = new URLClassLoader(urls);
cl.loadClass("A"); // A is the name found in files, in default package
这部分 运行 在 eclipse 中,但在 cmd 中抛出 ClassNotFound 异常。
在 cmd 中,脚本是:
java -cp build/libs/project.jar project.Main rootFolder test1
我的猜测是类路径导致了问题,但我不太确定为什么 URLClassLoader 需要使用类路径而不是文件 url。
所以我发现 Eclipse 会自动编译默认 classpath 文件夹下的所有 java classes。反射仅适用于编译后创建的 .class 文件,这就是抛出 ClassNotFound 异常的原因。
我有一个程序尝试使用 URLClassLoader 从文件夹加载 java 类。类加载器能够在 Eclipse 中加载 运行 时加载 类,但是当我尝试在 cmd 中加载 运行 它时,它会抛出 ClassNotFoundException。
文件结构:
-rootFolder/
-src/
-tests/
-test1/
-A.java
该程序有两个参数:args[0] 根文件夹的绝对路径和 args[1] 要读取的测试文件夹的名称。
String rootString = args[0]+ File.separator + "tests" + File.separator + args[1] + File.separator;
File folder = new File(rootString);
String[] files = folder.list();
我可以使用此路径在eclipse 和cmd 中获取文件名。 然后我有我的 URLClassLoader。
URL[] urls = new URL[] {new File(rootString).toURI().toURL()};
URLClassLoader cl = new URLClassLoader(urls);
cl.loadClass("A"); // A is the name found in files, in default package
这部分 运行 在 eclipse 中,但在 cmd 中抛出 ClassNotFound 异常。 在 cmd 中,脚本是:
java -cp build/libs/project.jar project.Main rootFolder test1
我的猜测是类路径导致了问题,但我不太确定为什么 URLClassLoader 需要使用类路径而不是文件 url。
所以我发现 Eclipse 会自动编译默认 classpath 文件夹下的所有 java classes。反射仅适用于编译后创建的 .class 文件,这就是抛出 ClassNotFound 异常的原因。