Как я получаю список библиотек JNI, которые загружаются?

Лучшее решение, которое я нашел, это использование maven-jaxb2-plugin, тогда единственное, что вам нужно, это:

    <!-- https://mvnrepository.com/artifact/org.jvnet.jaxb2.maven2/maven-jaxb2-plugin -->
    <dependency>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.14.0</version>
    </dependency>
20
задан Perception 12 December 2012 в 19:36
поделиться

1 ответ

Есть способ определить все загруженные в настоящее время собственные библиотеки, если вы это имели в виду. Невозможно определить уже выгруженные библиотеки.

На основе работы Светлина Накова ( Извлечь классы, загруженные в JVM, в отдельный JAR ), я сделал POC, который дает вам имена загруженных собственных библиотек из загрузчика классов приложения и загрузчика классов текущего class.

Сначала упрощенная версия без bu .... it обработки исключений, хороших сообщений об ошибках, javadoc, ....

Получить частное поле, в котором загрузчик классов хранит уже загруженные библиотеки через отражение

public class ClassScope {
    private static final java.lang.reflect.Field LIBRARIES;
    static {
        LIBRARIES = ClassLoader.class.getDeclaredField("loadedLibraryNames");
        LIBRARIES.setAccessible(true);
    }
    public static String[] getLoadedLibraries(final ClassLoader loader) {
        final Vector<String> libraries = (Vector<String>) LIBRARIES.get(loader);
        return libraries.toArray(new String[] {});
    }
}

Назовите это так

final String[] libraries = ClassScope.getLoadedClasses(ClassLoader.getSystemClassLoader()); //MyClassName.class.getClassLoader()

И вуаля библиотеки содержат имена загруженных собственных библиотек.

Получите полный исходный код из здесь

29
ответ дан 29 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: