2014-07-25 5 views
8

Я ищу простое объяснение связи между java.library.path и classpath. Хотя я едва ли новичок, мне никогда не приходилось возиться с j.l.p. Но у нас возникают проблемы с приложением WebSphere MQ, в котором я участвую, и мы хотели бы включить их отслеживание. К сожалению, однажды я сказал IBM, что мы перекомпилировали банки MQ, чтобы мы могли развернуть через Maven, они даже не поговорили бы обо мне об этой проблеме, если бы мы не загрузили баннеры WebSphere MQ с помощью java.library.path.Какова связь между java.library.path и pathpath

Так здорово, давайте повторим всю стратегию развертывания. Я в порядке, кусаю эту пулю, но вот мой вопрос:

Какова связь между java.library.path и classpath? Являются ли классы, найденные на j.l.p видимыми для компилятора? вам нужно указать j.l.p в командной строке компилятора? Можете ли вы указать эти классы как на j.l.p, так и на classpath? Это имеет приоритет.

И, пожалуйста, не бум-рэп этот вопрос для недостаточного исследования. Я, конечно, googled "java.library.path". Конечно, Газионы хитов. Я попытался сделать расширенный поиск google, ограничивающий выражение на сайте oracle.com. Все еще гейзиллионы хитов. Я пробовал использовать оба термина. Получите много новых объяснений сомнительного качества. Я попробовал поиск спецификации Java. Нет хитов.

Я хочу краткое и авторитетное объяснение. Может ли кто-нибудь указать мне на него?

UPDATE - IBM утверждает, что их MQ трассировка не будет работать, если я не загружать мое приложение с -Djava.library.path = {путь к MQ баночки}, и они даже не будут поддерживать меня, несмотря на наличие если я не сделаю это таким образом. И все же, конечно, у меня есть код, который ссылается на эти классы и должен компилироваться. Это мотивировка этого вопроса.

ответ

10

Какова связь между java.library.path и classpath?

Нет, единственное, что у них общего, это то, что они оба пути.

Являются ли классы, найденные на j.l.p видными для компилятора?

No.

вы должны указать j.l.p в командной строке компилятора?

Никогда. Вам это нужно только во время выполнения.

Можете ли вы указать эти классы как на j.l.p, так и на classpath?

Только класть классы на путь класса.

j.l.p эквивалентно LD_LIBRARY_PATH и говорит OpenJDK/HotSpot JVM, где найти совместно родные библиотеки как .DLL или .so не БАНКАХ, а не классы.

http://examples.javacodegeeks.com/java-basics/java-library-path-what-is-it-and-how-to-use/

+0

Спасибо за ссылку, Питер. Я думаю, что MQ-банки, по крайней мере некоторые из них, собственный код ARE (классы MQ для java являются оберткой вокруг C), поэтому это может быть уместно. И все же я управлял ими из classpath в течение многих лет без каких-либо проблем, пока я не включу этот механизм трассировки. –

+1

Вы не можете загрузить JAR как родную библиотеку, операционная система просто не поддерживает это. Вы можете поместить собственную библиотеку внутри JAR, но единственный способ загрузить ее - извлечь ее в файловую систему, а затем загрузить ее, как правило, явно с помощью System.load(). Возможно, библиотеки MQ используют java.library.path таким образом, чтобы он не был предназначен. то есть библиотека может анализировать и использовать свойство для того, что ему нравится. –

Смежные вопросы