从命令行编译

4
我正在尝试理解在命令行编译时选项-classpath的工作原理。
我从mydirectory的父目录中尝试:

javac -cp mydirectory/subdir Hello.java

但编译器显示:

javac: no source files

当我从subdir目录中进行编译时:

javac Hello.java

它可以正常编译。那么-cp(-classpath)是如何工作的?我做错了什么呢?

我建议您制作命令窗口的截图,使用ls和pwd显示当前目录中的文件以及当前目录的值。我们必须假设或猜测您正在做什么才能知道出了什么问题。我们还需要知道您的Hello类的包,或者断言您没有一个。 - arcy
3个回答

1
javac TestProgram1.java TestProgram2.java TestProgram3.java

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

如果您需要同时编译很多文件,但又不想使用通配符(可能您只想编译一个文件夹中的大量文件而不是全部文件),那么您可以创建一个参数文件,列出需要编译的文件。在参数文件中,您可以输入尽可能多的文件名,使用空格或换行符来分隔它们。这里有一个名为TestPrograms的参数文件,列出了三个需要编译的文件:
TestProgram1.java
TestProgram2.java
TestProgram3.java

你可以通过在javac命令行上使用@字符,后跟参数文件的名称,来编译此文件中的所有程序,例如:
javac @TestPrograms

-cp 和 -classpath

指定用户类文件的位置。如果您的程序使用存储在单独文件夹中的类文件,则使用此选项。


0
javac XXX.java

编译Java类所使用的命令,同时java命令中可用-classpath标志。

我们使用以下方式运行Java程序

java XXX.class

在开始使用main()函数之前,JVM需要知道类文件的位置。因此,我们使用classpath标志来指定类的路径。

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

一些运行Java程序的示例:

java -classpath .;yourJarFile.jar your.MainClass

 java -classpath path_till_classfile/HelloWorld

0

您正在编译的文件必须直接定义。

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

javac subdir/Hello.java

需要编译的内容。

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

例如,如果在代码中引用了类“Birds”,并且该类在名为“animals.jar”的jar包中,在当前文件夹的父文件夹中,您将需要这样做:

javac -cp animals.jar subdir/Hello.java

这也取决于OP为Hello.java声明了哪个包。 - Eric Jablow
@EricJablow 确实。如果包语句没有反映文件的放置位置,它将导致编译错误。 - Lee Meador

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接