【问题标题】:Compiling a java file using javac and the command line使用 javac 和命令行编译 java 文件
【发布时间】:2015-08-11 10:08:00
【问题描述】:

我正在尝试了解更多关于javac 以及如何通过命令行使用Java 开发者工具的信息。

据我了解,如果我们不在当前目录下,需要-classpath选项指定javac搜索我们的类和资源文件的路径,因为通常类路径设置为我们的当前工作目录。

这是我当前的工作目录:

/Users/user1/Desktop

我正在尝试编译一个.java 文件,该文件位于:

/Users/user1/Desktop/PF/

文件名为MainClass.java

我正在尝试使用以下命令对其进行编译:

javac -classpath /PF MainClass.java

但它似乎不起作用,实际上我一直收到以下内容:

javac: file not found: MainClass.java
Usage: javac <options> <source files>
use -help for a list of possible options

我做错了什么?

【问题讨论】:

  • 您应该只将此工具用作练习。一般来说,您应该使用构建工具,如 maven 或 Grade 或您的 IDE。

标签: java command-line compilation javac


【解决方案1】:

类路径适用于.class 文件,而不适用于.java 文件。

javac 命令需要.java 文件的正确路径才能编译它。所以

javac ./PF/MainClass.java

将在当前目录中创建类文件。

如果您的 MainClass.java 依赖于任何类文件来正确编译,那么您将这些类/jar 文件放在类路径中。

【讨论】:

    【解决方案2】:

    类路径不是这样工作的。您使用类路径指向 Java 文件编译所需的类。您不使用类路径来指向 Java 文件本身。

    进入 PF 目录并执行以下操作:

    javac MainClass.java
    

    这将在 PF 目录中创建 MainClass.class 文件。如果您想在桌面上创建 MainClass.class 文件,请从桌面上执行以下操作:

    javac PF/MainClass.java
    

    【讨论】:

    • @Xenomorph 请参阅我答案的后半部分。只需给 javac .java 文件的完整路径即可。
    • 但是为什么它不适用于-classpath?我认为该选项的目的实际上是指定在哪里可以找到要编译的文件。现在,如果我使用您建议的技术,并且如果我的班级 MainClass.java 再次使用同一目录中的其他班级 PF... 我会收到此类错误:error: cannot find symbol...
    • @Xenomorph 不。这不是类路径的作用。如果要编译目录中的所有类,请使用 *.java
    【解决方案3】:

    -类路径

    指定 javac 用于查找运行 javac 所需的类的路径 或被您正在编译的其他类引用。覆盖 默认值或 CLASSPATH 环境变量(如果已设置)。 目录用冒号分隔。它通常对 包含要在类路径上的源文件的目录。你 应始终在路径末尾包含系统类。

    类路径用于指定需要在您的类中使用的编译源。例如,在此代码中,如果您正在访问另一个类,那么您应该指定该类的编译源的位置。

    如果没有任何类依赖项,则只需删除类路径选项并使用 [navigate inside folder] 进行编译

    javac Mainclass.java
    

    【讨论】:

    • 我知道我可以像往常一样从文件夹PF 内正常编译,但目的实际上是能够从 .java 文件所在的文件夹外部编译...
    【解决方案4】:

    删除 -classpath。如果你在需要 java 文件的地方(目前你不需要),你也可以删除那个 PF/。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多