1

システムJavaパッケージの1つの独自の実装の作成に取り組んでいますが、パッケージを使用しようとすると間違ったクラスが選択されるという問題が発生しています。

たとえば、私のパッケージがabcDoStuffで、まったく同じ名前abcDoStuffの既存の Java パッケージがあるとします。

テスト アプリケーションで次のコードを使用すると、システム クラスがまだ使用されていることがわかります (/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar にあります)。

ClassLoader loader = test.class.getClassLoader();
System.out.println(loader.getResource("a.b.c.DoStuff.class");

私のパッケージは jar ファイル ( package.jar ) にコンパイルされました。

  1. クラスをテスト ファイルにインポートしました (import abcDoStuff;)
  2. クラスパスにpackage.jarを追加しました(「export CLASSPATH ...」と「java -classpath ...」の両方を使用)

私が見落としている何かがあるに違いない?システムパッケージの代わりにパッケージを受け取る方法について何か考えはありますか?

ありがとう、
クリス

4

2 に答える 2

2

jar を特別な「承認済み」ディレクトリに配置しない限り、標準パッケージのクラスを置き換えることはできません。また、その方法ではまったく交換できないものもあります。

于 2012-06-26T23:14:42.300 に答える
1

ブートクラスパスに関するヒントをくれた bmargulies に感謝します!

.jar ファイルを bootclasspath の先頭に追加すると、問題が解決しました。要約すると、パッケージの .jar を bootclasspath の先頭に追加することで、独自の Java パッケージ実装を使用することができました。

java -Xbootclasspath/p:<path-to-jar>
于 2012-06-27T03:36:46.543 に答える