【问题标题】:Compiling from the command line从命令行编译
【发布时间】:2013-07-30 22:34:53
【问题描述】:

我试图了解从命令行编译时选项 -classpath 的工作原理。

我从mydirectory的父母那里尝试:

javac -cp mydirectory/subdir Hello.java

但是编译器说:

javac:没有源文件

-cp (-classpath) 是如何工作的?我做错了什么?

如果我是从subdir 目录创建的:

javac Hello.java

然后正确编译。

【问题讨论】:

  • 我建议对你的命令窗口进行截图,使用 ls 和 pwd 显示当前目录中的文件和当前目录的值。关于你在做什么,我们必须假设或猜测太多事情才能知道什么是错的。我们还需要知道您的 Hello 类的包,或者您没有的断言。

标签: java command-line compilation


【解决方案1】:
javac TestProgram1.java TestProgram2.java TestProgram3.java

您可以使用通配符来编译文件夹中的所有文件,如下所示:

javac *.java

如果你需要同时编译很多文件但又不想使用通配符(也许你想编译大量文件但不是一个文件夹中的所有文件),你可以创建一个参数文件,它列出了要编译的文件。在参数文件中,您可以键入任意数量的文件名,使用空格或换行符来分隔它们。这是一个名为 TestPrograms 的参数文件,其中列出了要编译的三个文件:

TestProgram1.java
TestProgram2.java
TestProgram3.java

你可以编译这个文件中的所有程序,使用@字符,后跟javac命令行上的参数文件的名称,像这样:

javac @TestPrograms

-cp 和 -classpath

指定在哪里可以找到用户类文件。如果您的程序使用您存储在单独文件夹中的类文件,请使用此选项。

【讨论】:

    【解决方案2】:

    你要编译的文件必须直接定义

    例如,如果您在父文件夹中:

    javac subdir/Hello.java
    

    需要编译。

    类路径允许查找编译上述定义的内容所需的 .class 文件。

    例如,如果您在代码中引用了“Birds”类,并且该类位于当前文件夹中名为“animals.jar”的 jar 中,该文件夹是 java 文件所在位置的父级,您需要这个:

    javac -cp animals.jar subdir/Hello.java
    

    【讨论】:

    • 这还取决于 OP 为 Hello.java 声明的包。
    • @EricJablow 是的。如果 package 语句没有反映文件位置,则会导致编译错误。
    【解决方案3】:
    javac XXX.java
    

    用于编译java类的命令,其中as -classpath 标志可用于 java 命令。

    我们通过使用运行java程序

    java XXX.class
    

    这里从 main() 函数开始,JVM 应该知道类文件在哪里。 所以要指定类的路径,我们使用类路径标志

    Classpath 链接以获取更多详细信息。

    一些运行java程序的例子是

    java -classpath .;yourJarFile.jar your.MainClass
    
     java -classpath path_till_classfile/HelloWorld
    

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多