【问题标题】:javac gives an error message , that it has been foundjavac 给出一个错误信息,它已经被找到
【发布时间】:2012-09-05 13:45:11
【问题描述】:

当我输入java -version 时,会返回以下内容:

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (6b24-1.11.1-4ubuntu2)
OpenJDK Server VM (build 20.0-b12, mixed mode)

但是当我输入 javac -version 时,我收到以下消息:

The program 'javac' can be found in the following packages:
* openjdk-6-jdk
* ecj
* gcj-4.4-jdk
* gcj-4.6-jdk
* gcj-4.5-jdk
* openjdk-7-jdk
Try: sudo apt-get install <selected package>

这是为什么?我需要做什么才能摆脱这种情况?

【问题讨论】:

  • 看来您只是安装了 JRE 而不是 JDK...javac 在 JRE 中不可用。你安装了哪些包?

标签: java linux ubuntu javac


【解决方案1】:

您已经安装了包含 execute java 程序的东西的 java 运行时环境 (jre),但没有安装包含 build 这样的东西的 java 开发工具包 (jdk)应用程序,例如编译器。所以安装这些软件包之一,正如消息告诉你的那样,例如

sudo apt-get install openjdk-7-jdk

【讨论】:

  • JDK7 可用于为 Java6 和 Java7 编译代码,而 JDK6 显然不会为 Java7 编译代码。因此,就成功编译而言,选择更新的版本是更安全的选择。应用程序稳定性可能是使用较旧且经过更多测试的 Java 版本的原因,因此最终选择权在您。
  • 我的意思是如果解释器是 6,为什么编译器应该是 7?
  • openjdk-7-jdk package 将引入 openjdk-7-jre 作为依赖项,因此您也将拥有 Java 7 RE。然后,您可以set the default java version 发送给任何一个。但是你是对的,安装 JDK6 会占用更少的磁盘空间,并且会避免由于版本不匹配而导致的麻烦,所以除非你的代码需要 Java 7,否则也完全可以。
  • @MvG - 正如你所说,它可以有所作为。如果您使用比最低目标 JRE 更新的 JVM 进行编译,则存在 2 个潜在问题。 1) 您可以使用旧 JRE 不支持的版本生成字节码。 2)您可能不会注意到旧平台上不存在的类的依赖关系。这两者都会导致运行时错误。这些问题可以解决,但使用与您的 JRE 匹配的 JDK 更简单。
【解决方案2】:

java 命令执行已编译为 .class 文件(Java 字节码)的程序,它只是运行时环境。

javac 是 Java 编译器。它将 Java 源代码转换为 Java 字节码(.class 文件)。

这两个是独立的程序,因为典型用户只需要运行时 (java) 而不需要 javac。

您需要安装列出的软件包之一(最好是 openjdk-6-jdk。因为它将与您的 java 安装兼容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-26
    • 2021-01-18
    • 2016-08-23
    • 2015-06-22
    • 2015-12-17
    • 2016-12-07
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多