以前は、一部の org.apache パッケージが完全な org.apache パッケージ名で「そのまま」JRE jar に含まれていました。
これは、私のクラスがたとえば Xerces DomUtil を使用したい場合、
import org.apache.xerces.util.DOMUtil;
ルート クラスローダーは、このクラスを JRE の Xerces のバージョンに解決します。
Xerces の新しいバージョンまたは別のバージョンを使用したい場合、それをアプリケーションのクラスパスに含めることができませんでした。これは、クラスローダー システムが JRE にパッケージ化された Xerces を優先するためです。
今、この状況は変わりました。彼らは org.apache パッケージを取り、それらを com.sun.org.apache...internal... に変更しました。
したがって、JRE と一緒にパッケージ化された Xerces を直接使用したい場合は、以下をインポートできます。
import com.sun.org.apache.xerces.internal.util.DOMUtil;
(Eclipse は、com.sun 内でパッケージを使用しないようにというエラーを表示します .. しかし、それでもクラスはそこにあり、必要に応じてアクセス制限を変更できます)
このバージョンは、JAXP などのすべての JRE クラスで使用されます。
これにより、Xerces の場合はクラスパスに新しいバージョンを自由に配置し、JRE のものに干渉することなくアプリケーションから使用できます。
パッケージの名前を変更するだけで再パッケージ化されました。これは、たとえば、フォルダーから移動することを意味します
org/apache/xerces/util
フォルダへ
com/sun/org/apache/xerces/internal/util
一部のJRE担当者のハードドライブで、.javaファイル内を変更すると、
package org.apache.xerces.util;
に
package com.sun.org.apache.xerces.internal.util;
したがって、JVM の観点からは、これらはまったく異なるクラスです。