Если в приложении есть несколько версий jar, как найти Jvm, какой из них - PullRequest
4 голосов
/ 04 июня 2010

Если в приложении есть несколько версий jar, как найти JVM, какая из них?

Ответы [ 4 ]

2 голосов
/ 04 июня 2010

Если вы можете добавить флаг -verbose в командную строку запуска java, это выведет на стандартный вывод, какие классы загружены и из какого источника. Вывод выглядит так:

[Loaded javax.xml.transform.stream.StreamResult from C:\Program Files\Java\jre6\lib\rt.jar]

Если вы перенаправите вывод в файл, вы сможете легче проанализировать или найти нужную информацию.

2 голосов
/ 04 июня 2010

JVM ищет классы в том порядке, в котором файлы и каталоги находятся на пути к классам.

Будьте осторожны с серверами приложений и т. Д., Поскольку они имеют тенденцию заменять загрузчики классов, и в этом случае они могут отличаться.

0 голосов
/ 18 мая 2011

Немного высокий уровень, и я не уверен, что вы используете Spring, но если вы - у него есть очень полезный служебный класс, который хорошо мне подходит в таких случаях:

PathMatchingResourcePatternResolver ищет ресурсы (файлы) различными способами - относительно пути к классам / корня веб-приложения / файловой системы / и т. Д. Если вы попросите его найти файл, в котором найден искомый класс, он найдет его во ВСЕХ записях classpath. Я использую это так (обычно в eval / watch отладчика):

Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:your/package/YourClassName.class");

** Это не скажет вам, какой из классов используется кодом, но может помочь вам точно определить ваши проблемы в случае, если вы не уверены, откуда берутся классы.

0 голосов
/ 04 июня 2010

Это не предсказуемо.

Избегайте использования нескольких версий одной банки на пути к классам. Если вы вынуждены, сервер приложений обычно предлагает конфигурацию, которая предпочтительнее связанных библиотек, чем библиотек приложений.

Если вам нужно что-то более сложное, взгляните на OSGi - он позволяет использовать несколько версий в одной и той же среде выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...