如何让Ant在javac中使用JAXB 2.2.x而不是Java 6 SE JAXB类?

我正在更新遗留应用程序以使用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不存在’required’属性,但它在2.2.x中存在。

如何更改我的Ant构建脚本,以便从构建类路径中获取JAXB 2.2.6 jar而不是Java 6 SE JDK中包含的类?


更新:解决方案基于彼得的答案

      

我相信背书库文件夹的概念是你的朋友。

即开关:

  

在背书中出现的那些jar子被认为是装载任何其他类别的prio(我相信)。

有关更完整的示例,请参阅以下正确答案: 如何使Ant更喜欢来自链接JAR的类而不是JDK类?

只需将jaxb 2.2实现(例如jaxb-impl.2.2.5)添加到编译器的类路径中

  

这就足够了,JAXB将通过jar的META-INF / services /中的信息自动转移新的JAXB提供程序,并使用它代替默认的内部提供程序。 请参阅JAXBContext.newInstance API“JAXB实现的发现”