javac1.8类未找到

83

我安装了两个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 可以成功编译所有源代码。但是现在,我遇到以下错误信息:

Class not found: 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 时是否设置了某些配置参数?

13个回答

176
找不到类:javac1.8

这个错误通常在使用版本低于1.9.0的Apache Ant时发生,因为它们与Java 8不兼容。如果你正在使用Ant的版本小于1.9.0,则应该升级到1.9.x版本。

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

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

-Dbuild.compiler=javac1.7

9
我遇到了这个问题,给定的标识(-Dbuild.compiler=javac1.7)可以直接传递给ant,并且在传递时也能够有效。 - cincodenada
5
我找到了这个代码。它们测试你是否使用的是 Java 1.3 或更早版本。这是十多年前的古老代码。由于此原因,每次 Oracle 推出新的 1.x 版本时,Ant 都会出现故障。Ant 已经要求使用 1.4 或更高版本。他们应该从代码中删除这个检查。 - David W.
3
@ David W - 为什么他们不支持Java 1.9和2.0,这样更改就能在未来的6到8年内工作。Java 9很快就会发布,一切都会再次崩溃... - jww
2
错误在2012年的Eclipse Ant 1.9.0中得到了修复,但是Eclipse Kepler中的Ant(2014!)仍停留在1.8.4版本,因此这个问题仍然存在。这个问题是否已经在Luna中得到升级或者我们仍在等待?(我发现Eclipse的网站对于任何合适的变更跟踪和知道哪些插件的哪些版本进入了哪些发布版本都是完全无用的;有没有任何信息可以得到?) - Stuart Rossiter
谢谢,我在测试应用程序的向后兼容性时,在MacOS 10.8上使用Ant时遇到了这个问题。解决方法是使用1.7版本来构建。 - tresf
显示剩余2条评论

14
作为对 Kristian Holdhus 的回答的补充(标记为正确),您可以使用 Ant javac task 上的 compiler 属性。设置 compiler="modern" 应该是向后(至少到 1.3)和向前兼容的。
这样就避免了设置名为 build.compiler 的 Java 系统属性的需要。只有在没有显式设置 javac 任务上的 compiler 属性时,Ant 才会使用 build.compiler 的值作为后备。

我当然点赞了Kristian Holdus的回答。但是,我发现这对我的情况更好。通过强制调用者添加-D参数,我们使得将build.xml发送给外部用户变得困难。我们还需要提供额外的使用说明,而这些说明越少越好 :) - Rakesh N
它正在工作,并在构建时显示注释 [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. 等。 - aswzen

7

我曾经遇到过这个问题。我的JAVA_HOME和JRE_HOME设置正确,而且我也安装了版本大于1.9的Ant。

为了解决这个问题,我进入Eclipse的Window -> Preferences。展开Ant并选择Runtime,然后默认情况下应该选中了Classpath选项卡,在右侧有一个名为"Ant Home"的按钮。点击此按钮并确认它指向你的Ant文件夹。


3
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编译器? - kamilz
1
使用“Run As”>“Ant Build…”运行Ant构建,然后打开“JRE”选项卡并选择您想要用于运行脚本的“Runtime JRE”。 - Toni Toni Chopper
“javac”任务可以为旧的虚拟机生成字节码,请参阅文档中的“target”属性:https://ant.apache.org/manual/Tasks/javac.html。Java 1.5无法为后续VM生成字节码。 - Mark O'Connor

3

我用Eclipse尝试了一下,得到了同样的错误找不到类:javac1.8

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

>ant -version

Apache Ant(TM) 1.9.6版, 编译时间为2015年6月29日

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

我只需编辑Eclipse中的ANT HOME路径,它也能正常工作:)

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

  1. 右键单击build.xml文件
  2. Run as
  3. External tool configurations
  4. 选择classpath标签

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

enter image description here


你把ANT Home路径改成了什么? - IgorGanapolsky
1
嗨 @IgorGanapolsky,之前的Ant版本路径是Ant 1.8,我已经更新到最新的Ant版本1.9,如上图所示。然后它就可以工作了。希望我回答了你的问题。 - KulDeep

1

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


1
我尝试了其他所有解决方案,但都没有奏效。最终我在Eclipse中找到了一种适合我的方法,请按照以下步骤操作:
  1. 右键单击ant任务名称,例如“myBuild.xml”在ant窗口中。

  2. 选择Run As | External Tool Configurations

  3. 然后在JRE选项卡上,选择Separate JRE:Java JDK7或您的java 7命名的任何内容。

  4. 点击应用(Apply),然后运行(Run)。

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


0

将Ant更新到1.9.x版本,因为Java 8与1.9以下版本的Ant不兼容,或者在命令中加入-Dbuild.compiler=javac1.7参数,如下所示:

ant release -Dbuild.compiler=javac1.7


0

0

我尝试了所有其他的解决方案,但都没有起作用。最后我在Eclipse中找到了一种适合我的方法:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接