我有以下文件结构,需要使用命令行进行编译。我一直在使用 Eclipse,它在编辑器中运行良好。
/src
/maps
Structures/ (.java files) using a 3rd party external JAR file in E:\Lib\math.jar
Util/ (.java files)
TestClasses/ (.java files) Test.java is the main class
我使用以下 javac 指令编译了上述文件
C:\src\maps>javac -classpath E:\Lib\math.jar Util\*.java Structures\*.java TestClasses\*.java
编译没有问题并创建相关的 .class 文件。
但是,当我尝试使用以下 java 指令运行主类时
C:\src\maps>java TestClasses\TestSOM
我收到以下异常
Exception in thread "main" java.lang.NoClassDefFoundError: TestClasses\TestSOM (
wrong name: maps/TestClasses/TestSOM)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)
使用命令行执行主类的正确方法是什么?
使用类的完全限定名称并且还包括库以避免引用的类出现运行时错误
C:\src\>java -classpath .;E:\Lib\math.jar map.TestClasses.Test
假设
Test.java
有您提到的 main 方法。
使用以下:
C:\src>java maps.TestClasses.TestSOM
如果您的类位于 src 目录内。如果有任何其他更改目录到该目录。
cd maps/TestClasses
java -classpath E:\Lib\math.jar;../Structures;../Util; Test
如果你的类是Test.java。
您应该开始将所有类放在同一个文件夹中,这样会更容易启动您的项目。 它们不需要位于单独的文件夹中,当您确实使用单独的文件夹时,您希望它们位于不同的“包”中。