Я знаю , что есть эта статья на 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 ?

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

1 ответ1

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 файл (или любой другой) просто для запуска приложения. Если такого сценария не существует, вы должны сделать это самостоятельно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .