为啥这个 javac: File Not Found 错误?

Posted

技术标签:

【中文标题】为啥这个 javac: File Not Found 错误?【英文标题】:Why this javac: File Not Found error?为什么这个 javac: File Not Found 错误? 【发布时间】:2011-08-31 19:17:38 【问题描述】:

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

我在home/pathToFolderA/src 中有.java 文件

home/pathToFolderB/gen-java

当我在 home/pathToFolderA/src 中运行 javacjava 时,一切正常

但是当我在 home/pathToFolderB/gen-java 上运行 javac fileName.java 时,我得到一个找不到文件的错误,特别是

javac: file Not found: fileName.java
Usage: javac <options> <source files>

为什么会发生这种情况?

感谢大家的帮助

【问题讨论】:

您如何在第二个目录中运行它 - 它是否存在/您是否具有读取权限等? 【参考方案1】:

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

javac /home/pathToFolderA/src/fileName.java

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

【讨论】:

mmm 不知道 .... 如果我在 pathToFolderA/src 中并且我调用 javac fileName.java ..它应该可以工作...而且确实可以。当我在另一个文件夹中时它不起作用......问题是为什么? @algorithmicCoder:因为在另一个文件夹中,fileName.java 不存在。试试cat fileName.java,我敢说也找不到文件。 类路径不用于查找源文件。 你是绝对正确的..fileName.java 在一个子目录下..绝对愚蠢的错误..我会看看 Liv 的答案如何正确指定我的路径和类路径。 ..谢谢!【参考方案2】:

您不应该将您的 classpath 设置为指向您的 JDK bin 目录——而应该是 PATH 环境变量,它与 classpath 的用途不同。 (类路径定义了一个包含已编译 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 

并运行已编译的程序:

java -classpath /path/to/some.jar:/path/to/another.jar:/home/pathToFolderWithResultsOfCompilation full.name.of.your.Java

【讨论】:

【参考方案3】:

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

这是错误的。类路径用于查找*.class 文件,而不是操作系统特定的可执行文件。 JDK 的bin 目录不属于类路径。请注意,类路径也不适用于查找*.java 源文件。

运行javac 时,如果源文件不在当前目录中,则需要指定源文件的路径。

【讨论】:

【参考方案4】:

确保您的文件名不包含空格

例如:

HelloWorld.java

通常当您通过复制过去重命名文件时会出现错误,这会导致名称和点之间出现空格(这是错误:HelloWorld .java)。

并确保您将目录更改为您的文件所在的同一文件夹

【讨论】:

我不敢相信所有这些挣扎都是由于文件名。我刚改名并繁荣!我的程序被编译了。谢谢。【参考方案5】:

如果没有目录“gen-java”的列表以及您输入的确切命令,我的猜测是您正在尝试编译一个不存在的文件。 Linux 区分大小写,所以也许这就是你的问题。或者文件不存在。

【讨论】:

以上是关于为啥这个 javac: File Not Found 错误?的主要内容,如果未能解决你的问题,请参考以下文章

DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN

DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN

springboot整合mybatis 异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not foun

JDK环境配置: javac is not recognized as an internal or external command, operable program or batch file(

关于javac is not recognized as an internal or external command, operable program or batch file的解决方案

LInux javac时, 提示command not found