1. ホーム
  2. java

[解決済み] クラスがどのJARファイルからのものかを判断する

2022-04-22 13:23:01

質問

今、IDEを前にしていないので、APIの仕様だけを見ています。

CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
    URL jar = src.getLocation();
}

あるクラスがどのJARファイルからのものかを判断したい。これは、そのための方法ですか?

どのように解決するのですか?

ブートストラップ・クラスローダで読み込まれたクラス以外のすべてのクラスで動作します。他の判断方法としては

Class klass = String.class;
URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");

notnoop さんのご指摘の通り klass.getResource() メソッドは、クラスファイル自体の場所を返します。例えば

jar:file:/jdk/jre/lib/rt.jar!/java/lang/String.class
file:/projects/classes/pkg/MyClass$1.class

getProtectionDomain().getCodeSource().getLocation() メソッドは、jar ファイルの場所または CLASSPATH を返します。

file:/Users/home/java/libs/ejb3-persistence-1.0.2.GA.jar
file:/projects/classes