找不到javac1.8类


80

我已经安装了两个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在安装过程中会设置一些配置吗?

Answers:


173
找不到类: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 2014年

克里斯蒂安的回答是正确的,我们可以在eclipse中生成ant-launch配置时添加-Dbuild.compiler = javac1.7,请参见< bugs.eclipse.org/bugs/show_bug.cgi?id=409358 >
Shiva Achari,2014年

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(2014!)中的Ant仍为1.8.4,因此此问题仍然存在。这是在Luna升级的,还是我们还在等待?(我发现Eclipse的网站对于任何适当的更改跟踪并知道什么插件进入了哪个版本都完全没有用;这在哪里
可用

14

作为克里斯蒂安·霍尔德胡斯(Kristian Holdhus)回答(标记为正确)的后续,您可以改用Ant javac taskcompiler上的属性。设置应既向后兼容(最远可追溯至1.3),也应向前兼容。compiler="modern"

这样可以避免设置名为的Java System属性build.compiler。只有在没有明确设置任务compiler属性的情况下javac,Ant才会使用的值build.compiler作为后备。


我当然支持克里斯蒂安·霍尔德斯的回答。但是,我发现这是针对我的情况的更好解决方案。通过强制调用者添加-D参数,我们很难将build.xml交付给外部用户。我们还需要提供其他使用说明,这些说明总是越少越好:)
Rakesh N 2016年

它的工作[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.
原理

7

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

我所做的修复是进入Eclipse的Window-> Preferences。展开Ant,然后选择运行时。默认情况下,应该选择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安装,因此javac找不到1.8二进制文件(如)。将它们设置为Java 1.8安装,就可以了。


但是我不想使用jdk1.8。为什么Ant尝试在此设置下使用1.8编译器?
kamilz

1
使用“运行方式”>“ Ant构建...”运行Ant构建,然后打开“ JRE”选项卡并选择要用于运行脚本的“运行时JRE”。
Toni Toni Chopper

“ javac”任务可以为较旧的vm生成字节代码,请参见doco中的“ target”属性:ant.apache.org/manual/Tasks/javac.html Java 1.5无法为更高版本的VM生成字节代码。
Mark O'Connor 2013年

2

我用Eclise尝试了一下,但未找到相同的错误类:javac1.8

我在系统上验证了ANT版本

> ant版本

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

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

我只是在Eclipse中编辑了ANT HOME路径,它在这里也起作用。:)

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

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

现在,从此处更改ANT Home路径。

在此处输入图片说明


您将ANT Home路径更改为什么?
IgorGanapolsky '16

1
@IgorGanapolsky,您好:早先的Ant版本路径是针对Ant 1.8的,我将其更新为最新的Ant版本1.9,如上图所示。而且有效。希望我回答了你的问题。
KulDeep


0

我尝试了所有其他解决方案,但没有一个起作用。我终于找到了一种适用于Eclipse的方法:

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

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


0

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

蚂蚁发布-Dbuild.compiler = javac1.7



0

有时,通过ANT进行战争时出现的问题也与build.properties文件中的Java版本错过匹配有关,因为build.XML尝试使用build.compiler属性中提到的Java版本

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


0

您可以下载更新版本的eclipse,其中在plugins目录中包括更新版本的Ant。然后,将Ant jar复制到较早的eclipse的插件目录中。Eclipse将自动指向较新版本的Ant。这适用于较老的开普勒和较新的Mars2。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.