尝试引用Jar文件时,Eclipse不支持major.minor版本51.0错误

时间:2013-09-18 16:55:24

标签: java eclipse ant

我正在编译针对java版本6的jar文件,但是我收到了与Unsupported major.minor version 51.0相关的错误。在阅读了几篇帖子之后,例如How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version我无法解决我的问题,并采取了极端的措施来尝试隔离问题,如下所述。

我创建了一个java沙箱项目,其目的是测试我从源代码制作的Xerces-For-Android jar,并定位到版本6.如果我将源代码直接放入项目中,我&# 39;能够成功编译和运行我的测试程序。但是,如果我创建一个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参考...

其他一些附注:

  1. 我手动删除了.jar文件并对Xerces-For-Android项目进行了清理,以确保没有旧的二进制文件。
  2. 我还在沙盒项目上做了一个干净的测试,用于测试jar文件的使用。同样的问题。
  3. 卸载Java 7后,我重新安装了java 6u45。通过51.0参考仍然没有运气。
  4. 根据Joop Eggen的要求,我验证了eclipse中的编译器设置:
  5. enter image description here

    enter image description here

    解决方案:

    根据Joop Eggen的请求,我以详细模式运行了蚂蚁脚本(ant -verbose > build.log)...这给了我更多信息来识别问题,这就是&#34 ;清洁&#34; ant的任务没有运行,这与&#34;项目清理&#34;不同。在日食。 jar中的清单文件正在更新,但是类文件没有被重新创建,因为它们显示为&#34;最新的&#34;。将clean任务作为依赖项添加到编译任务后,一切都按预期工作。离开这篇文章的人有类似的问题。

3 个答案:

答案 0 :(得分:2)

确保在进行构建之前完全清除所有内容。 major.Minor事情发生在Jar的类中,不一定是jar本身。

浏览并删除您可以找到的任何.class文件,然后从头开始重新编译。

答案 1 :(得分:1)

在eclipse中禁用自动编译,或者更好地从命令行运行ant。做<javac verbose="true" ...>。检查是否有JAVA_HOME设置和Ant安装。

Javac还有compilersource属性。

也许是偏执并检查.class文件,代码见dumpJavaClassVersion

答案 2 :(得分:0)

如果您使用maven来构建项目,请参阅下文。确保相应地指定源和目标。我在1.7中编译时保留了这个错误(保留了1.7),但发现在amazon beanstalk上,它是1.6

<build>
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
</plugins>
</build>