【问题标题】:Run Eclipse project from command line从命令行运行 Eclipse 项目
【发布时间】:2015-11-17 04:27:33
【问题描述】:

我有两个关于从命令行编译和运行 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 in thread "main" java.lang.NoClassDefFoundError: myfile (wrong name: XYZ /myfile.java)" 即使我试图从 XYZ 目录运行。当我尝试从其他地方跑步时,我也遇到了同样的错误。
我在 XYZ 目录中给出的命令:
java myfile
我在其他地方时给出的命令:
java -cp C:\ABC\src\XYZ myfile

如果有任何帮助,我还会附上我的目录结构的层次结构:

【问题讨论】:

    标签: java eclipse command-line


    【解决方案1】:

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

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

    D.java 在哪里:

    package a.b.c;
    
    public class D { }
    

    第一个问题,cannot read: 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 可以在任何地方运行(注意 - 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',并提供Fully Qualified Class Name。即:

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

    注意我得到一个异常,因为D 类没有 main 方法,因此无法运行。为了解决这个问题,我们添加了一个 main 方法:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多