我正在尝试使用jaxb序列化异常的解决方案。 (http://forums.java.net/jive/thread.jspa?messageID=256122)
我需要为该解决方案实现的类需要引用以下com.sun类。
import com.sun.xml.internal.bind.v2.model.annotation.AbstractInlineAnnotationReaderImpl;
import com.sun.xml.internal.bind.v2.model.annotation.Locatable;
import com.sun.xml.internal.bind.v2.model.annotation.RuntimeAnnotationReader;
import com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader;
当我在Eclipse中编译并运行我的代码时,它运行正常。但是当我使用Maven编译代码时,它无法抱怨com.sun包,例如“package com.sun.xml.internal.bind.v2.model.annotation不存在”。
eclipse和maven都在使用JDK 1.6,所以我不明白为什么会这样。 JDK中不是那些com.sun类吗?
编辑: 我最终决定它是不可能的。我只是创建了一个新bean并复制了我需要的信息并使用了它。
答案 0 :(得分:16)
如果一个类在 com.sun。* 包中,它只是意味着它是由Sun开发的,而不是它是JDK的一部分。
JDK中的Sun类以 sun。* 为前缀,并且不属于公共支持的接口,因此应谨慎使用。来自Sun FAQ:
Sun在Java 2 SDK标准版中包含的类属于软件包组java。,javax。,org。*和sun。。除了sun。包之外的所有包都是Java平台的标准部分,将来会得到支持。通常,在Java平台之外的诸如sun。之类的软件包可以在OS平台(Solaris,Windows,Linux,Macintosh等)之间不同,并且可以随时更改,而无需通知SDK版本( 1.2,1.2.1,1.2.3等)。包含对sun。包的直接调用的程序不是100%Pure Java。换句话说:
Java 2平台标准版API规范中记录的java。,javax。和org。*包构成了官方支持的公共接口。
如果Java程序直接调用这些包中的API,它将在所有兼容Java的平台上运行,而不管底层的OS平台如何。
sun。*软件包不是受支持的公共界面的一部分。
直接调用sun。*包的Java程序不保证在所有兼容Java的平台上运行。实际上,即使在同一平台上的未来版本中,也不能保证这样的程序能够工作。
话虽如此,您列出的那些类可以在以下工件中的JBoss存储库中找到:
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1</version>
</dependency>