![](/img/trans.png)
[英]Java SE 6 vs. JRE 1.6 vs. JDK 1.6 - What do these mean?
[英]Is it possible to replace the version of the JAXB implementation in Java JRE 1.6 SE?
我有這個測試課
import javax.xml.bind.annotation.XmlElement;
class CompileTest {
void foo( @XmlElement String in ) {
}
}
我的java版本是
$ java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
當我嘗試編寫那個我正在學習的課程時
javac CompileTest.java
CompileTest.java:5: annotation type not applicable to this kind of declaration
void foo( @XmlElement String in ) {
^
1 error
這對Java 6有效。當我嘗試將更新的JAXB庫添加到類路徑時,它沒有幫助。 有辦法解決這個問題嗎?
javac -cp jaxb-api-2.2.4.jar CompileTest.java
使用Java認可的標准覆蓋機制
將jaxb-api-2.2.4.jar
放在<java-home>\\lib\\endorsed
目錄中。
或者,使用-D java.endorsed.dirs選項
javac -Djava.endorsed.dirs=/your/path/to/jaxb-directory CompileTest.java
參考文獻:
http://docs.oracle.com/javase/6/docs/technotes/guides/standards/
使用“endorsed libraries”文件夾的概念。 看看這里: 我如何讓Ant使用JAXB x而不是Java 6 SE JAXB類......
基本上這是一種指示JRE使用更新版本的JAXB的方法。
您可以在這里閱讀更多內容: JAXB的非官方指南:將JAXB 2與SE 6一起使用另請參閱此問題: 在JRE 6中使用已簽名目錄的確切方法是什么
它只能應用於字段或方法,而不能應用於方法參數。 看到
@Retention(RUNTIME) @Target({FIELD, METHOD})
public @interface XmlElement {
編輯:XmlElement的源代碼(JDK 1.6.0_18)
* @since JAXB2.0
* @version $Revision: 1.19 $
*/
@Retention(RUNTIME) @Target({FIELD, METHOD})
public @interface XmlElement {
所以我看到1.6.0_18版本的XmlElement為1.19版本,只有FIELD
和METHOD
目標可用。
編輯:所以你的問題是jdk 1.6 XmlElement與jaxb.2.2不同。 您可以訪問http://grepcode.com/file/repo1.maven.org/maven2/javax.xml.bind/jaxb-api/2.2.4/javax/xml/bind/annotation/XmlElement.java?av查看來源= F
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.