Как получить доступ к Java JAR через переменную среды CLASSPATH в Windows 7

0

Я знаю , что есть эта статья на JAR - файлов в Linux , но решение включает в себя некоторые специальные команды Linux я не знаю, и в конечном счете , я хотел бы понять , если я могу получить доступ к JAR (и баночки это зависит от) без необходимости писать скрипт.

Я нахожусь на Windows 7, и мой основной класс Java org.sync.MainEntryрасположен в моем главном названном JAR synchronizer.jar. Я поместил абсолютный путь всех других JAR-файлов, от которых он зависит, в мою CLASSPATHпеременную в Компьютер -> Расширенные настройки -> Переменные среды. Я даже пытался переместить эти JAR-файлы в ту же папку, что и мой основной JAR-файл.

Но когда я выполняю (в командной строке, перешел на мой основной JAR, с или без других JAR) следующий вызов:

java org.sync.MainEntry

Я получаю ошибку «Невозможно получить доступ к jarfile org.sync.MainEntry». Поэтому я перемещаю ВСЕ банки в одно и то же место и должен сделать

java -cp my_other_jar.jar;my_other_other_jar.jar;synchronizer.jar org.sync.MainEntry

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

Основываясь на статье, упомянутой выше, я рад признать, что CLASSPATHне видит jar, только классы внутри, но JAR - это архив, может быть, я могу как-то извлечь их и указать CLASSPATHтуда?

Заранее спасибо за вашу помощь!

kilgoretrout
источник

Ответы:

0

JAR-файлы - это библиотеки приложений. Вы можете сравнить их с DLL. Однако библиотеки DLL всегда являются только библиотекой кода, которую будет использовать исполняемый файл. JAR может содержать либо только библиотечный код, но также может содержать само приложение. Другое отличие состоит в том, что Windows может централизовать / зарегистрировать библиотеки DLL, чтобы их можно было обнаружить. Для JAR такой концепции не существует. На самом деле это просто артефакты, которые принадлежат конкретному Java-приложению. Они могут быть общими во время выполнения, но это редко можно увидеть. Приложение Java обычно предоставляет вместе с ним все JAR-файлы, необходимые для его запуска, и никогда не полагается на какие-либо JAR-файлы, уже существующие в целевой системе (кроме тех, которые являются частью самой Java). Java-люди, как правило, не заботятся о таком дублировании между приложениями, потому что JAR-файлы часто довольно малы по размеру.

JAR - это просто ZIP-файл с .classфайлами, которые использует виртуальная машина Java. Внутри ZIP всегда есть так называемый файл MANIFEST, и это почти единственное, что отличает его от традиционного ZIP. (когда на самом деле это просто ZIP, почему, черт возьми, вы не можете просматривать его в Windows? Вам нужно спросить об этом Microsoft. Используйте подходящий инструмент для работы со сжатыми файлами, я рекомендую 7Zip, а не полагаться на собственные инструменты Windows)

Для запуска любого Java-приложения необходимо знать, где найти эти .classфайлы. Эти файлы могут существовать либо отдельно на диске, либо они могут быть объединены в файл JAR. Результат тот же. Нет смысла извлекать .classфайлы из JAR.

Java-приложение обычно поставляется со скриптом запуска, так что «клиенту» не нужно будет писать свой маленький .BATфайл (или что-то еще) только для запуска приложения. Если такого сценария не существует, вы должны сделать это самостоятельно.

это весело
источник