Существует ли (совместимый, если возможно) способ определения абсолютного пути загруженного класса?
Конечно, это не всегда возможно (если вы думаете о динамически создаваемых классах), но еслизагруженный класс находится внутри банки, как получить абсолютный путь для этой банки?
MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()
Полный код:
package org.life.java.so.questions; /** * * @author jigar */ public class GetClassPath { public static void main(String[] args) { System.out.println(GetClassPath.class.getProtectionDomain().getCodeSource().getLocation().getPath()); } }
Вывод:
/ C: / Документы% 20 и% 20Настройки / Аргус / Мои% 20Документы /NetBeansProjects / temp / build / classes /
или
ClassLoader loader = GetClassPath.class.getClassLoader(); System.out.println(loader.getResource("org/life/java/so/questions/GetClassPath.class"));
Попробуйте что-то вроде этого:
SomeClass.class.getResource("/" + SomeClass.class.getName() + ".class").toString();
Если класс загружается из jar, результат должен выглядеть примерно так:
jar://myjar.jar!path/to/SomeClass.class