ant xjc 任务与 jdk 6 一起工作
Posted
技术标签:
【中文标题】ant xjc 任务与 jdk 6 一起工作【英文标题】:ant xjc task to work with jdk 6 【发布时间】:2013-07-12 21:54:36 【问题描述】:我正在使用 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 构建时我仍然收到上述错误。任何建议
【问题讨论】:
【参考方案1】:如果您使用 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 引入了调用动态字节码。Java SE 7 编译器生成的版本 51 类文件不能在 Java SE 6 中使用。
【讨论】:
我得到的主要版本 51 比 50 新,这是此编译器支持的最高主要版本。从 xsd 生成的某些类的错误。如何解决这个问题?? 您是否在已将应用程序部署到的服务器上收到该错误?如果是这样,那台机器需要运行 Java 7,或者您需要使用 Java 6 编译应用程序。-source
选项告诉 javac 接受什么版本的源文件。 -target
告诉它生成与指定版本的 JVM 兼容的字节码,但这只有在您还指定 -bootclasspath
和 -extdirs
选项以指向旧版本的 Java 引导类时才有效。我认为 OP 的问题可能可以通过该机制解决,但在开发和部署中使用相同的 JDK 是更好的做法(库兼容性等)。以上是关于ant xjc 任务与 jdk 6 一起工作的主要内容,如果未能解决你的问题,请参考以下文章
如何修改Java 9的ANT build.xml中的xjc块?