【发布时间】:2021-01-18 11:21:08
【问题描述】:
我正在从我的一个类中执行 java 二进制文件,然后抛出 ClassNotFoundException:
Results of executing:/usr/bin/java -classpath "/home/geo" Geoline
Error stream:
Exception in thread "main" java.lang.NoClassDefFoundError: Geoline
Caused by: java.lang.ClassNotFoundException: Geoline
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
Could not find the main class: Geoline. Program will exit.
Output stream:
Geoline 类位于 /home/geo/Geoline.java。问题是,无论我位于文件系统的哪个位置,如果我手动执行相同的命令,就会执行该类。为什么使用 Runtime.getRuntime().exec 执行二进制文件时会发生不同的事情?
edit: 这是使用详细标志生成的输出:pastie link 编辑:这是文件的内容:
public class Geoline {
public static void main(String[] args) {
System.out.println("blabla");
}
}
【问题讨论】:
-
为什么要引用 .java 文件?我讨厌问一个“愚蠢”的问题,但你有没有把它编译成一个 .class 文件?以及路径 /home/geo/Geoline.class 所在的目录是在 CLASSPATH 中吗?
-
是的,已编译。编译发生在运行操作之前。 -classpath "/home/geo" 不是加载到CLASSPATH中吗?
-
类有包吗?如果是,则包的根目录必须位于 CLASSPATH 中。如果没有,请添加一个。没有包的类是微不足道的。
-
该类不属于包。 /home/geo 在这种情况下不是好目录吗?
-
以防万一启用 -verbose 选项,看看是否有任何奇怪的事情