Eclipse不会编译,坏的类文件,错误的版本

时间:2010-08-21 00:22:16

标签: java eclipse

我正在尝试编译从其他开发人员检出的SVN代码。 Eclipse最近给了我很多麻烦。

以下是我的项目特定设置: alt text

这是我的ant文件的编译部分:

<target name="compile" depends="build-common, init" description="Compile files. ">
    <javac srcdir="${src_dir}" destdir="${build_dir}" debug="true" >
        <classpath path="${tomcat_home}/lib/servlet-api.jar;" />
    </javac>
</target>

当我编译(使用Ant)时,我收到一条错误消息:

compile:
    [javac] Compiling 3 source files to H:\MYCOMPANY\portlets\build
    [javac] H:\MYCOMPANY\portlets\src\com\mycompany\portlets\CourseList.java:3: cannot access java.io.IOException
    [javac] bad class file: C:\Program Files\Java\jre1.6.0_07\lib\rt.jar(java/io/IOException.class)
    [javac] class file has wrong version 49.0, should be 48.0
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
    [javac] import java.io.IOException;
    [javac]                ^
    [javac] 1 error

这个错误是什么意思?

9 个答案:

答案 0 :(得分:13)

49.0的类文件版本属于Java 1.5.x,而48.0的类文件属于Java 1.4.x版本之一。由于引入了Java语言规范中的一些新功能和更改,类文件结构在1.5中发生了变化。

从错误中,可以推断出需要Java 1.4类文件,而找到了Java 1.5类文件。看起来编译器是Java 1.4编译器,因此您应该尝试验证您是使用正确版本的Java编译器还是正确的JDK(即JDK home)。

<强>附录

Ant倾向于在$ JAVA_HOME / bin / javac中查找javac可执行文件。如果JAVA_HOME环境变量设置不正确,比如Java 1.4主页,那么即使在Eclipse中也有可能出现所描述的错误。

ADDENDUM#2

在PATH环境变量中添加条目可能会导致更改Ant的搜索类路径行为,从而可能导致使用不同的tools.jar来编译源代码。这可能是由于JRE 1.4.2安装中的jvm.dll用于运行Eclipse(以及Ant)。

答案 1 :(得分:3)

  

错误的类文件:C:\ Program Files \ Java \ jre1.6.0_07 \ lib \ rt.jar(java / io / IOException.class)
  类文件有错误的版本49.0,应该是48.0

告诉所提到的类文件是使用生成49.0版本的类文件的编译器编译的,而ant期望使用生成版本48.0的类文件的编译器进行编译。由于有问题的类是JRE的一部分,因此您需要更新build.xml中的类路径以包含包含版本48.0的类文件的JRE。

答案 2 :(得分:3)

首先,您的项目设置与构建脚本无关。项目设置告诉您Eclipse如何构建项目,而不是如何运行ant文件。

要查找jvm ant运行的位置,请在Eclipse中右键单击构建脚本,然后选择“Run as ...”。在弹出的对话框中,导航到jvm选项卡​​并检查用于运行脚本的jre。

答案 3 :(得分:2)

您似乎使用1.5版Java编译器运行Ant,但是针对1.6安装的类库(rt.jar)进行编译。您应该设置build.xml,以便它始终使用相同java版本的(编译器和类库)。

答案 4 :(得分:2)

错误消息表示您的Ant使用的tool.jar中包含的编译器工具是旧版本,而不是它尝试编译的类。 消息“[javac]类文件有错误的版本50.0应该是49.0”意味着你的类文件需要jdk 6.0但你的tool.jar来自jdk 5.0发行版。要在eclipse中切换到正确的tools.jar,请打开Window&gt; Preferences&gt; Ant&gt; Runtime&gt; Global Entries。

答案 5 :(得分:1)

您可以尝试将tools.jarjdk/jre复制到tomcat的common/lib

它对我有用here

答案 6 :(得分:0)

也许你需要使用位于C:\ Program Files \ Java \ jdk \ jre的JDK JRE,而不是公共

答案 7 :(得分:0)

您还需要更改ANT的Java版本,因为如果您将运行时环境用作JDK1.8,那么您的ANT也应该指向相同的版本,或者Ant应该引用JDK1.8 / lib中的tools.jar文件/tools.jar位置。 要解决这个问题,请转到Eclipse Go to Window - &gt;偏好 - &gt; Ant - &gt;运行时 - &gt;全局条目。在这里检查并更新tools.jar路径,最新版本如下: C:\ Program Files \ Java \ jdk1.8.0_60 \ lib \ tools.jar

然后运行您的构建脚本问题将被解决。 :)

答案 8 :(得分:0)

将eclipse中的tools.jar更改为正确的版本修复它。 我使用jre 1.6并且必须将其更改为使用1.8来获取版本52中的类文件。