设置类路径后,java无法访问目录类
我很难将目录的类路径设置为类包。我正在尝试运行一个jar文件,该文件将目录作为命令行参数。该程序使用目录访问文件夹中的类文件,并使用反射探索类字段和方法
final File folder = new File(args[0]);
classList = dirParse.listFilesForFolder(folder);
然后我浏览类列表,得到每个类的名称,并使用Class.forName()
方法访问这些类
Class c = Class.forName(className);
为了让上面这行工作,我必须将classpath设置为包含类的目录的地址
当我使用不属于以下包的类目录时,我可以让程序正常运行:
java -cp "Explorer.jar:/Users/john/Desktop/TestClass/" explorer.ExplorerDemo /Users/john/Desktop/TestClass/
然而,对于下面的代码行,垄断是一个包,程序在调用Class.forName(className)
后抛出一个ClassNotFoundException
java -cp "Explorer.jar:/Users/john/Desktop/Programming\ Project/Monopoly/build/classes/monopoly/" explorer.ExplorerDemo /Users/john/Desktop/Programming\ Project/Monopoly/build/classes/monopoly/
出于测试的目的,我试着调整“类”。forName()调用以包含包名,如下所示:
Class c = Class.forName("monopoly."+className);
然而,这也会引发ClassNotFoundException
# 1 楼答案
Class.forName
是在当前类的类加载器上下文中获取类信息的快捷方式。Javadoc声明这相当于假设类目录是作为运行时参数提供的,并且不是原始类路径的一部分,我建议您实例化将指向目录的自定义
URLClassLoader
实例示例代码:
有关带有类路径指令的JAR,请参阅:Run a JAR file from the command line and specify classpath