windows 如何使用命令行编译和运行包含多个类的java项目?

vkc1a9a2  于 2022-12-14  发布在  Windows
关注(0)|答案(1)|浏览(245)

当我尝试用javac.main编译时

D:\Desktop\Development\Java\Section 4\Abstract
❯ javac -classpath . *.java
error: Invalid filename: *.java
Usage: javac <options> <source files>    
use --help for a list of possible options
[17:37]  Shell                                                                                                                                                                                                         xUSAGE 174ms  
Main.java:5: error: cannot find symbol
        Student st1 = new Student("John");
        ^
  symbol:   class Student
  location: class Main
Main.java:5: error: cannot find symbol
        Student st1 = new Student("John");
                          ^
  symbol:   class Student
  location: class Main
2 errors

但是我能够成功地编译它

D:\Desktop\Development\Java\Section 4\Abstract\src\com\Testing
>javac -classpath . *.java

虽然我还没有弄清楚如何运行Main类

java Main
Error: Could not find or load main class Main                                  
Caused by: java.lang.NoClassDefFoundError: com/Testing/Main (wrong name: Main)
bnl4lu3b

bnl4lu3b1#

如果你想直接使用javac来编译(实际上,不要使用编译系统),你必须指定文件在文件系统中的位置。所以不是*.java,而是src\com\Testing\*.java。是的,如果你有很多包,这意味着一个非常大的命令行。
java的参数接受一个类名-一个完全限定的类名。而不是路径。
如果您有此源文件:

package com.foo;

public class Bar {
  public static void main(String[] args) { .. }
}

然后道:

  • 它应该在projectRoot/src/main/java/com/foo/Bar.java中,其中projectRoot是作为主项目文件夹的目录,src/main/java可以只是src,或者src/whatever--或者指示它所涵盖的子项目类型的内容,com/foo匹配包语句,Bar匹配公共类名。
  • 编译时一个Bar.class福尔斯出来了;这应该在projectRoot/bin/com/foo/Bar.class或类似的地方,其中bin也可能是build。但是com/foo/Bar.class部分是强制的-类文件 * 必须 * 在与包匹配的子目录结构中。
  • 要运行这个文件,你需要把projectRoot/bin放在类路径上,然后写出完整的类名。

相关问题