我正在使用xjc ant任务从xsd和wsdl生成java类,然后我从这些生成的类中生成一个jar。 PFB我正在使用的代码,
<!-- Below code generates java classes from wsdl -->
<exec executable="xjc">
<arg value="-wsdl" />
<arg value="${wsdl}/mysample.wsdl" />
<arg value="-d" />
<arg value="${myclasses}" />
<arg value="-d" />
<arg value="${myclasses}" />
<arg value="${xsdfile}/mysample.xsd" />
</exec>
<!-- Below code generates jar from java classes -->
<jar destfile="${jars}/mysample.jar" basedir="${myclasses}"/>
它在JDK7本地工作正常但是当我将它部署到我的jdk6服务器时,我得到了<pre>org.jboss.resteasy.spi.UnhandledException: java.lang.UnsupportedClassVersionError: com/my/webservices/mysampleweb
。有任何建议如何使这项工作??
修改
对于从xsd生成的某些类,我收到major version 51 is newer than 50, the highest major version supported by this compiler.
错误。如何解决这个问题??
我检查了我的ANT_HOME,java版本和jre一切都很好..但是当我通过命令行使用ant构建时仍然遇到上述错误..任何建议
答案 0 :(得分:2)
如果您正在使用Java版本7构建并尝试在Java 6上运行它 - 或者实际上比您编译的Java版本更早 - 那么您将获得此UnsupportedClassVersionError。编译的Java字节码与JVM的新版本向前兼容,但不向后兼容。将Java 7放在运行时环境中,或使用JDK 6进行编译。
Specifically, from Oracle's documentation of the Java 7 release:
二进制兼容性
Java SE 7与Java SE 6二进制兼容,但下面列出的不兼容性除外。除了指出的不兼容性之外,使用Java SE 6编译器构建的类文件将在Java SE 7中正确运行。
根据JVM规范,Java SE 7的类文件版本为51,因为JSR 292引入了invokedynamic字节代码.Java SE 7编译器生成的版本51类文件不能在Java SE 6中使用。