【问题标题】:javac1.8 class not foundjavac1.8 类未找到
【发布时间】:2014-01-09 06:10:00
【问题描述】:

我已经安装了两个 jdk - jdk 1.5 和 jdk 1.8。 我有以下 Ant build.xml 配置文件:

<target name="compileCustomSrc">
    <javac srcdir="src" destdir="build/classes" source="1.5" target="1.5" >
        <classpath>
            <fileset dir="C:/lib/">
                <include name="*.jar" />
            </fileset>
        </classpath>
    </javac>
</target>

在安装 jdk1.8 之前,从 Eclipse 调用的 Ant 编译所有源代码成功。但是现在,我收到以下错误消息:

找不到类:javac1.8

我的 JAVA_HOME 和 JRE_HOME:

JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16
JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16

并在 Eclipse JRE 中设置为 1.5。 Java 1.8 在安装过程中是否设置了一些配置?

【问题讨论】:

    标签: java eclipse ant classnotfound


    【解决方案1】:
    找不到类:javac1.8

    已知此错误发生在 Apache Ant 版本低于 1.9.0 - 与 Java 8 不兼容。如果您使用的 Ant 版本低于 1.9.0,则应更新到 1.9.x释放。

    这里是相关的错误报告:https://issues.apache.org/bugzilla/show_bug.cgi?id=53347

    顺便说一句,如果您只想使用 Java 8 进行编译,但不需要编译任何实际的 Java 8 语法,那么您可以将以下参数作为 workaround 传递给 javac,这将允许您继续使用旧版本的 Ant:

    -Dbuild.compiler=javac1.7
    

    【讨论】:

    • 我遇到了这个问题,给定的标志 (-Dbuild.compiler=javac1.7) 在直接传递给 ant 时也有效。
    • Kristian 的答案是正确的,我们可以在 Eclipse 中生成 ant-launch 配置时添加 -Dbuild.compiler=javac1.7 参见 bugs.eclipse.org/bugs/show_bug.cgi?id=409358>
    • 我找到了code。他们正在测试您是否使用 Java 1.3 或更低版本。十多年前的旧代码。正因为如此,每当 Oracle 推出新的 1.x 版本时,Ant 就会中断。 Ant 已经需要 1.4 或更高版本。他们应该从代码中删除这个检查。
    • @David W - 他们为什么不添加对 Java 1.9 和 2.0 的支持,以便这些更改在接下来的 6 或 8 年内有效。 Java 9 即将发布,一切都将再次崩溃......
    • 该错误已在 2012 年为 Eclipse 的 Ant 1.9.0 修复,但 Eclipse Kepler (2014!) 中的 Ant 仍为 1.8.4,因此此问题仍然存在。这是在 Luna 中升级还是我们还在等待? (我发现 Eclipse 的网站对于任何类型的适当更改跟踪和了解哪些插件的哪些版本进入了哪些版本完全没有用处;这在任何地方吗?)
    【解决方案2】:

    作为 Kristian Holdhus 答案的后续(标记为正确),您可以改用 Ant javac task 上的 compiler 属性。设置compiler="modern" 应该是向后(早至1.3)和向前兼容的。

    这避免了设置名为build.compiler 的Java System 属性的需要。只有在javac 任务上没有显式设置compiler 属性的情况下,Ant 才会使用build.compiler 的值作为后备。

    【讨论】:

    • 我当然赞成 Kristian Holdus 的回答。但是,我发现这对于我的情况来说是一个更好的解决方案。通过强制调用者添加 -D 参数,我们很难将 build.xml 发送给外部用户。我们还需要提供额外的使用说明,总是越少越好:)
    • 它的工作,在构建[javac] warning: C:\Program Files\Java\jre1.8.0_152\lib\rt.jar(java/net/ConnectException.class): major version 52 is newer than 51, the highest major version supported by this compiler. [javac] It is recommended that the compiler be upgraded.等时显示注释
    【解决方案3】:

    我也有同样的问题。我正确设置了 JAVA_HOME 和 JRE_HOME。我也有 Ant > 1.9。

    我所做的修复它是进入 Eclipse 到 Window -> Preferences。展开 Ant 并选择 Runtime。默认情况下,应该选择 Classpath 选项卡,并且在右侧有一个名为“Ant Home”的按钮。单击此按钮并仔细检查它是否指向您的 Ant 文件夹。

    【讨论】:

      【解决方案4】:
      JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16
      JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16
      

      您的 JAVA_HOME 和 JRE_HOME 设置为 Java 1.5 安装,因此找不到 1.8 二进制文件(如 javac)。 将它们设置为 Java 1.8 安装,应该没问题。

      【讨论】:

      • 但是我不想用jdk1.8。为什么 Ant 尝试使用具有此设置的 1.8 编译器?
      • 使用“Run As”>“Ant Build...”运行 Ant 构建,然后打开“JRE”选项卡并选择要用于运行脚本的“Runtime JRE”。跨度>
      • “javac”任务可以为较旧的虚拟机生成字节码,参见文档中的“target”属性:ant.apache.org/manual/Tasks/javac.htmlJava 1.5 不能为以后的虚拟机生成字节码。
      【解决方案5】:

      我用 Eclise 试了一下,得到了同样的错误 Class not found: javac1.8

      我在我的系统上验证了 ANT 版本

      >ant-版本

      2015 年 6 月 29 日编译的 Apache Ant(TM) 版本 1.9.6

      当我尝试从命令提示符运行 build.xml 时,它起作用了。 然后我在 Eclipse 中检查,它指的是旧版本的 ANT。

      我只是在 Eclipse 中编辑了 ANT HOME 路径,它也从这里开始工作。 :)

      下面是需要在 Eclipse 中编辑 ANT 路径的图像。

      1. 右键单击 build.xml 文件
      2. 运行方式
      3. 外部工具配置
      4. 选择类路径选项卡

      现在从这里更改 ANT Home 路径。

      【讨论】:

      • 你把 ANT Home 路径改成什么了?
      • 嗨@IgorGanapolsky 早些时候,Ant 版本路径适用于 Ant 1.8,我已将其更新到最新的 Ant 版本 1.9,如上图所示。它奏效了。希望我回答了你的问题。
      【解决方案6】:

      将 Ant 更新到 1.9.x 版本,因为 Java 8 与低于 1.9 的 Ant 版本不兼容

      【讨论】:

        【解决方案7】:

        我尝试了所有其他解决方案,但都没有奏效。我终于在 Eclipse 中找到了适合我的方法,请按照以下步骤操作:

        1. 右键单击ant任务名称,例如`myBuild.xml 在 ant 窗口中。

        2. 选择Run As | External Tool Configurations

        3. 然后在 JRE 选项卡上,选择单独的 JRE:Java JDK7 或您的 java 7 名称。

        4. 点击应用,然后运行。

        您的 ant 任务将被执行,并将正确构建!

        【讨论】:

          【解决方案8】:

          我尝试了所有其他解决方案,但都没有奏效。我终于在 Eclipse 中找到了适合我的方法:

          • 右键单击 ant 任务名称,例如ant 窗口中的“compileCustomSrc”。
          • 选择Run As | External Tool Configurations
          • 然后在JRE 选项卡上,选择Separate JRE: Java SE7 或您的java 7 名称,然后点击Apply,然后点击Run

          您的 ant 任务将被执行,并将正确构建!

          【讨论】:

            【解决方案9】:

            将 Ant 更新到 1.9.x 版本,因为 Java 8 与低于 1.9 的 Ant 版本不兼容,或者在命令 put -Dbuild.compiler=javac1.7 之后,请参见以下内容:

            ant 发布 -Dbuild.compiler=javac1.7

            【讨论】:

              【解决方案10】:

              您可以在您的系统上下载并解压缩 ANT 1.10,然后尝试将 Eclipse 中的 ANT 主页为您的项目更改为 1.10。它应该可以工作,请阅读此内容以获取更多详细信息。 http://devops-badal.blogspot.com/2017/02/class-not-found-javac18-issue-while.html

              【讨论】:

                【解决方案11】:

                有时通过 ANT 构建战争时的问题也与 build.properties 文件中的 java 版本不匹配有关,因为 build.XML 尝试使用 build.compiler 属性中提到的 java 版本

                检查 build.compiler 属性是否与预期的 java 版本相同。

                【讨论】:

                  【解决方案12】:

                  您可以下载较新版本的 eclipse,它在 plugins 目录中包含较新版本的 Ant。然后,将 Ant jar 复制到旧版 eclipse 的插件目录中。 Eclipse 将自动指向较新版本的 Ant。这对我来说适用于较旧的开普勒和较新的 Mars2。

                  【讨论】:

                    【解决方案13】:

                    我遇到了同样的问题。我能够通过设置属性在 build.xml 中解决它。

                    <property "build.compiler=javac1.7">
                    

                    【讨论】:

                      猜你喜欢
                      • 2014-06-19
                      • 2014-08-01
                      • 1970-01-01
                      • 2014-06-20
                      • 2014-04-26
                      • 2018-05-03
                      • 2020-10-15
                      • 2019-05-07
                      • 2018-04-15
                      相关资源
                      最近更新 更多