从命令行运行Eclipse项目

关于从命令行编译和运行Eclipse java项目,我遇到两个问题。 当我刚从eclipse IDE运行时,这很好用。 我尝试谷歌搜索,但无法让事情发生。 任何帮助深表感谢。

问题1:当我尝试从与.java文件所在目录不同的位置进行编译时,会抛出错误“ 无法读取:myfile.java ”。 但是如果我迁移到这个目录然后编译。
我给出的命令是(当在其他目录中时):
javac -cp C:\ ABC \ src \ XYZ myfile.java
在XYZ目录中我给出的命令:
javac myfile.java
这生成了两个.class文件myfile.class和Testing_Thread.class(我想这是因为我的代码中有一个线程)

问题2:在我通过转到其目录编译后,当我尝试运行程序时,我收到错误“ 线程中的exception”主“java.lang.NoClassDefFoundError:myfile(错误的名称:XYZ / myfile.java) ”即使我试图从XYZ目录运行。 当我尝试从其他地方跑步时,我也得到了同样的错误。
在XYZ目录中我给出的命令:
java myfile
我在其他地方给出的命令:
java -cp C:\ ABC \ src \ XYZ myfile

如果有任何帮助,我还附加了我的目录结构的层次结构:
在此处输入图像描述

这些示例假定以下源结构:

C:\temp\compile-test\src\a\b\c\D.java 

其中D.java是:

 package abc; public class D { } 

第一个问题, 无法读取:myfile.java ,是因为使用cp命令行选项指向源代码是不正确的。

 C:\temp\compile-test\src>javac -cp c:\temp\compile-test\src\a\b\c D.java javac: file not found: D.java Usage: javac   use -help for a list of possible options 

这应该是以下,从源文件夹运行javac ,我们可以使用源文件的相对路径(注意 – javac从源文件夹运行):

 C:\temp\compile-test\src>javac a\b\c\D.java 

或者,我们指定源文件的完整路径,并且可以从任何地方运行javac (注意 – javac是从C:\这里运行的):

 C:\>javac temp\compile-test\src\a\b\c\D.java 

上述两个选项都将导致您的类文件与源文件在同一文件夹中创建。 即:

 C:\temp\compile-test\src\a\b\c\D.class 

对于第二个问题,如果你尝试运行一个包含来自包’内部的包名的类,这将导致名称错误(注意 – java在这里从包里面运行):

 C:\temp\compile-test\src\a\b\c>java D Exception in thread "main" java.lang.NoClassDefFoundError: D (wrong name: a/b/c/D) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Could not find the main class: D. Program will exit. 

要运行D类,您应该位于包“root”,并提供完全限定的类名 。 即:

 C:\temp\compile-test\src>java abcD Exception in thread "main" java.lang.NoSuchMethodError: main 

注意我得到一个例外,因为D类没有main方法,因此无法运行。 要修复,我们添加一个main方法:

 package abc; public class D { public static void main(String[] args) { System.out.println("main"); } } 

并重新运行:

 C:\temp\compile-test\src>java abcD main