从命令行运行Eclipse项目

时间:2012-05-08 07:04:10

标签: java eclipse command-line

关于从命令行编译和运行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:在我通过转到目录编译后,当我尝试运行程序时,我收到错误“线程中的异常”主“java.lang.NoClassDefFoundError:myfile(错误名称:XYZ) /myfile.java)“即使我试图从XYZ目录运行。当我尝试从其他地方跑步时,我也得到同样的错误 我在XYZ目录中给出的命令:
java myfile
我在其他地方给出的命令:
java -cp C:\ ABC \ src \ XYZ myfile

如果有任何帮助,我还附加了我的目录结构的层次结构:
enter image description here

1 个答案:

答案 0 :(得分:8)

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

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

D.java是:

package a.b.c;

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 <options> <source files>
use -help for a list of possible options

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

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

或者,我们指定源文件的完整路径,javac可以在任何地方运行(注意 - javacC:\运行):

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

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

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

对于第二个问题,如果您尝试运行一个包含来自&#39; inside&#39;包裹,这将导致名称错误(注意 - java从&#39;内部&#39;包中运行):

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课程,您应该在&#39; root&#39;,并提供Fully Qualified Class Name。即:

C:\temp\compile-test\src>java a.b.c.D
Exception in thread "main" java.lang.NoSuchMethodError: main

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

package a.b.c;

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

并重新运行:

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