我正在尝试编译从其他开发人员检出的SVN代码。 Eclipse最近给了我很多麻烦。
以下是我的项目特定设置:
这是我的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
这个错误是什么意思?
答案 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.jar
从jdk/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中的类文件。