java – Eclipse / Ant在版本1.9中创建一个jar,即使一切似乎都设
我有一个使用ant和
eclipse构建的项目,我希望它与
Java 8兼容.
当我尝试使用Java 8运行jar时,我收到以下错误: $/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar hypnos.jar Error: A JNI error has occurred,please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: org/joshuad/musicplayer/MusicPlayerUI has been compiled by a more recent version of the Java Runtime (class file version 53.0),this version of the Java Runtime only recognizes class file versions up to 52.0 所以看起来它正在使用Oracle的Java 9(安装在我的系统上)进行编译,但是我无法在eclipse中找到指定它的位置.我看到的一切似乎都表明我们正在使用java 8(截图如下). 我觉得我必须遗漏一些东西,但我无法弄清楚在哪里.为了让这个jar与Java 8 / class文件版本52.0兼容,我该怎么办? 项目>属性> Java Build Path 项目>属性> Java编译器 窗口>偏好>编译器 右键单击Ant构建文件>运行方式>外部工具配置 Ant构建文件 <project name="Hypnos Music Player" default="compile" basedir="."> <property name="src" location="src"/> <property name="build" location="build"/> <property name="jarFile" location="hypnos.jar"/> <path id="class.path"> <fileset dir="lib"> <include name="**/*.jar" /> </fileset> <pathelement location="${jarFile}" /> </path> <target name="init"> <tstamp/> <mkdir dir="${build}"/> </target> <target name="compile" depends="init" description="compile the source"> <javac fork="yes" includeantruntime="false" srcdir="${src}" destdir="${build}"> <classpath refid="class.path" /> </javac> </target> <target name="jar" depends="compile" description="Create a jar."> <jar destfile="${jarFile}" basedir="${build}"> <manifest> <attribute name="Main-Class" value="org.joshuad.musicplayer.MusicPlayerUI" /> <attribute name="Class-Path" value="lib/commons-cli-1.4.jar lib/jaad-0.8.4-nospi.jar lib/jaudiotagger-2.2.6-SNAPSHOT.jar lib/jflac-1.2.jar lib/jl1.0.1.jar lib/jogg-0.0.7.jar lib/jorbis-0.0.15.jar lib/vorbisspi1.0.3.jar" /> </manifest> </jar> </target> </project> 解决方法
你的$JAVA_HOME环境变量是什么?
我最近有一个similar problem,结果是Ant似乎忽略了Eclipse提供的许多设置,只使用$JAVA_HOME.我通过在build.xml中放置以下内容来发现这一点: <target name="jdk_version_validation"> <echo message="Java Version: ${java.version}" /> <echo message="Java home: ${java.home}" /> <echo message="JAVA_HOME: ${env.JAVA_HOME}" /> <echo message="JAVACMD: ${env.JAVACMD}" /> </target> 这让我这样: jdk_version_validation: [echo] Java Version: 1.7.0_80 [echo] Java home: C:Program FilesJavajre7 [echo] JAVA_HOME: C:Program FilesJavajdk1.8.0_131 [echo] JAVACMD: C:Program FilesJavajdk1.7.0_80bin 我发现预测Ant将生成哪个版本的唯一可靠方法是在build.xml中强制执行以下操作: <property name="ant.build.javac.source" value="1.7"/> <property name="ant.build.javac.target" value="1.7"/> 所以,我给你的建议:尝试在build.xml中放置以下内容: <property name="ant.build.javac.source" value="1.8"/> <property name="ant.build.javac.target" value="1.8"/> 为了OP中描述的问题的变化,为了消除“Eclipse欺骗Ant”的任何可能性,更新: >转到窗口>偏好> Java>安装JRE并尝试只保留目标JRE,确保它是JDK文件夹中的一个(而不是直接位于Java文件夹下的兄弟文件夹).>转到项目>属性> Java编译器并选中启用项目特定设置,确保将编译器合规性级别设置为目标JRE java版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |