为什么这个javac:File Not Found错误?

alg*_*der 2 java linux command-line centos javac

在CentOS 5 linux上使用一些基本的java应用程序,我的classpath设置指向home/pathToJava/bin包含javacjava

我有.java文件home/pathToFolderA/src

home/pathToFolderB/gen-java

当我运行javac,并javahome/pathToFolderA/src一切完美

但是,当我javac从内部运行时home/pathToFolderB/gen-java,fileName.java我得到一个文件未找到错误,具体而言

javac: file Not found: fileName.java
Usage: javac <options> <source files>
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?

谢谢你的帮助

Jon*_*eet 6

类路径用于查找文件,而不是文件.(它也不用于查找javajavac二进制文件;它们可以在您的正常路径中找到.)您需要指定要显式编译的文件:

javac /home/pathToFolderA/src/fileName.java
Run Code Online (Sandbox Code Playgroud)

显然,如果你已经 /home/pathToFolderA/src那里,你可以使用,fileName.java因为它被视为相对于你当前的目录.


Liv*_*Liv 5

您不应该将类路径设置为指向JDK bin目录 - 而应该是PATH环境变量,它对类路径起不同的作用.(类路径定义了包含已编译的Java .class代码的jar和目录列表; PATH变量定义了一个路径列表,其中shell需要查找并找到当前目录中找不到的程序时执行 - 所以如果你例如,类型zip- 它将查找定义的所有目录PATH并找出该zip程序位于其中/usr/bin)其次,如果要从两个目录编译源,则需要指定:

  • 源的所有路径(两者home/pathToFolderA/srchome/pathToFolderB/gen-java)
  • 要生成已编译的.class文件的路径
  • 在类路径中指定您可能在源文件中使用的任何库

总结一下,编译会是这样的:

javac -d /home/pathToFolderWithResultsOfCompilation -classpath /path/to/some.jar:/path/to/another.jar home/pathToFolderA/src/*.java home/pathToFolderB/gen-java/*.java 
Run Code Online (Sandbox Code Playgroud)

并运行已编译的程序:

java -classpath /path/to/some.jar:/path/to/another.jar:/home/pathToFolderWithResultsOfCompilation full.name.of.your.Java
Run Code Online (Sandbox Code Playgroud)