我正在更新旧版应用程序以使用 Java 6 SE 而不是 Java 5 SE。该应用程序使用 JAXB,在 Java 5 SE 下,它在类路径上有 JAXB 参考实现 jar。当我迁移到 Java 6 SE(更新 38)时,我遇到了一些问题(请参阅链接的 Stackoverflow 问题),我在一些帮助下解决了这些问题。
所以接下来引起麻烦的是项目 Ant 构建脚本。当 Ant 编译任务执行时,它会选择 Java 6 SE 附带的 JAXB 的嵌入式版本,而不是我在类路径中包含的 jar 中的版本(JAXB 2.2.6 版本)。我相信 Java 6 SE 包括 JAXB 2.1.x。这会导致编译时错误,如下所示:
[javac] location: @interface javax.xml.bind.annotation.XmlElementRef
[javac] @XmlElementRef(name = "abbrev", type = JAXBElement.class, required = false)
在这种情况下,JAXB 2.1.x 中的 @XmlElementRef 不存在“必需”属性,但在 2.2.x 中存在。
如何更改我的 Ant 构建脚本,以便它从构建类路径中获取 JAXB 2.2.6 jar,而不是从 Java 6 SE JDK 中打包的类?
更新:基于彼得答案的解决方案
<target name="compile" depends="clean">
<javac deprecation="on"
classpathref="prj.classpath"
srcdir="${src}"
destdir="${build.dir}"
debug="on"
debuglevel="lines,vars,source"
source="1.6">
<compilerarg value="-Djava.endorsed.dirs=${lib.ext.dir}/jaxb"/>
</javac>
</target>