我正在编译一个针对 java 版本 6 的 jar 文件,但是我收到与Unsupported major.minor version 51.0
. 在阅读了几篇文章后,例如How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version我无法解决我的问题并采取极端措施来尝试隔离问题,如下所述。
我创建了一个 java 沙箱项目,其目的是测试我从源代码制作并定位到版本 6 的 Xerces-For-Android jar。如果我将源代码直接放入项目中,我可以编译和成功运行我的测试程序。但是,如果我制作一个 jar 文件,然后将其添加到我的构建路径中,我会得到Unsupported major.minor version 51.0
.
阅读几篇文章,这 Unsupported major.minor version 51.0
似乎是一个基于不同java版本编译的问题。版本 51.0 看起来是 java 7。为了简单地进行测试,我从我的机器上卸载了所有 Java 7 安装,确保我的 eclipse 项目指向相同的 Java 6 JRE,并且我的 JAVA_HOME 设置为 Java 6u45。我还重新启动 eclipse 以确保我的更改到位。
我Ant
用来创建jar文件。代码非常简单,我什至将 javac 目标指定为 1.6。
<project name="XercesForAndroid" default="dist" basedir=".">
<description>
Builds jar for Xerces-For-Android
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac target="1.6" srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the .jar file -->
<jar jarfile="${dist}/lib/Xerces-For-Android.jar" basedir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
运行 ant 脚本后,我使用 7-zip 检查 jar,发现清单显示使用 6u45 制作它。
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_45-b06 (Sun Microsystems Inc.)
关于我可能遗漏的任何想法?我看不出如何再引用 Java 7,但它似乎是基于 51.0 参考...
其他几个旁注:
- 我手动删除了 .jar 文件,并对 Xerces-For-Android 项目进行了清理,以确保没有旧的二进制文件存在。
- 我还对我的沙盒项目进行了清理,以测试 jar 文件的使用。同样的问题。
- 卸载 Java 7 后,我重新安装了 java 6u45。通过 51.0 参考仍然没有运气。
- 根据 Joop Eggen 的要求,我在 eclipse 中验证了编译器设置:
解决方案:
根据 Joop Eggen 的要求,我以详细模式ant -verbose > build.log
(ant
项目清洁”在 Eclipse 中。jar 中的清单文件正在更新,但类文件没有被重新创建,因为它们显示为“最新”。将 clean 任务作为依赖项添加到 compile 任务后,一切都按预期工作。如果有人遇到类似问题,请不要写这篇文章。