9

我正在尝试使用一种解决方案来使用 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 包,如“包 com.sun.xml.internal.bind.v2.model.annotation 不存在”。

eclipse 和 maven 都使用 JDK 1.6,所以我不明白为什么会这样。JDK里面不是那些com.sun类吗?

编辑:我最终认为这是不可能的。我只是创建了一个新 bean 并复制了我需要的信息并使用了它。

4

1 回答 1

20

如果一个类在com.sun.*包中,它只是意味着它是由 Sun 开发的,而不是它是 JDK 的一部分。

JDK 中的 Sun 类以sun.*为前缀,并且不是公共支持接口的一部分,因此应谨慎使用。来自太阳常见问题解答

Sun 包含在 Java 2 SDK 标准版中的类属于包组 java。,javax。, org.* 和 sun. . 除了太阳。包是 Java 平台的标准部分,将来会得到支持。一般来说,包如sun。,在 Java 平台之外,在不同的操作系统平台(Solaris、Windows、Linux、Macintosh 等)之间可能会有所不同,并且可以随时更改 SDK 版本(1.2、1.2.1、1.2.3 等),恕不另行通知)。包含直接调用太阳的程序。包不是 100% 纯 Java。换句话说:

爪哇。,javax。Java 2 平台标准版 API 规范中记录的 org.* 包构成了官方的、受支持的公共接口。

如果 Java 程序直接调用这些包中的 API,它将在所有 Java 兼容平台上运行,而不管底层 OS 平台如何。

sun.* 包不是受支持的公共接口的一部分。

保证直接调用 sun.* 包的 Java 程序可以在所有 Java 兼容平台上运行。事实上,即使在同一平台上的未来版本中,也不能保证这样的程序可以正常工作。

话虽如此,您列出的那些类在以下工件的JBoss存储库中可用:

<dependency>
  <groupId>javax.xml</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.1</version>
</dependency>
于 2009-08-13T10:59:50.330 回答