【问题标题】: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>

为什么会发生这种情况?

感谢大家的帮助

【问题讨论】:

  • 您如何在第二个目录中运行它 - 它是否存在/您是否具有读取权限等?

标签: java linux command-line centos javac


【解决方案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 区分大小写,所以也许这就是你的问题。或者文件不存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-05
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 2016-08-25
        相关资源
        最近更新 更多