有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java URLClassLoader可以在eclipse中工作,但不能在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中抛出ClassNotFoundException。 在cmd中,脚本是:

java -cp build/libs/project.jar project.Main rootFolder test1

我的猜测是类路径导致了这个问题,但我不太清楚为什么URLClassLoader需要使用类路径而不是文件URL


共 (1) 个答案

  1. # 1 楼答案

    所以我发现Eclipse会自动编译默认类路径文件夹下的所有java类。反射只在屏幕上起作用。编译后创建的类文件,这就是引发ClassNotFound异常的原因