внешняя ссылка на стороннюю библиотеку (Jar) внутри другого Jar без переноса второго внутри первого - PullRequest
1 голос
/ 25 сентября 2011

Я пишу небольшой фрагмент кода, целью которого является использование AppleScriptEngine для связи с Growl. Я получил бы файл jar под названием MyApplication.jar со всеми моими классами, но мне нужно сослаться на AppleScriptEngine.jar (разработанный Apple и хранящийся в / System / Library / Java / Extension) ... Здесь проблема: AppleScriptEngine.jar присутствует в каждом дистрибутиве Os x, поэтому я хотел бы сослаться на него внутри MyApplication.jar MANIFEST.MF без добавления AppleScriptEngine.jar в мой файл .jar. Это в основном по двум причинам: во-первых, AppleScriptEngine является частным файлом Apple, во-вторых, я надеюсь, что есть способ обратиться к существующему файлу внутри файловой системы. Я много читал о правильной композиции файла jar, и в каждом примере я обнаружил, что есть внешний файл jar, упакованный внутри файла jar кодировщика. Я попытался изменить атрибут class-path внутри моего MANIFEST, чтобы он указывал прямо на AppleScriptEngine.jar следующим образом:

Манифест-версия: 1.0

Rsrc-Class-Path: ./

Путь к классу: /System/Library/Java/Extensions/AppleScriptEngine.jar

Rsrc-Main-Class: core.MyApplicationLauncher

Основной класс: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Rsrc-Class-Path должен быть локальной ссылкой внутри моего фляги, но давая абсолютный путь к Class-Path, я должен иметь возможность ссылаться на каждый файл в моей системе. Возможно, что-то не так в том, как я определяю путь, или я могу ссылаться только на файлы, вложенные в мою банку. Внутри затмения, очевидно, все работает нормально, потому что он имеет ссылки на системную библиотеку JRE, которая также содержит AppleScriptEngine.jar. Так что, возможно, есть способ напрямую обратиться к системной библиотеке JRE в моем файле MANIFEST. Я не смог найти ответ после многих часов серфинга. У кого-нибудь есть идея, чтобы преодолеть этот тупик?

1 Ответ

2 голосов
/ 26 сентября 2011

Наконец-то я нахожу решение после множества проб и ошибок. Моя ошибка заключалась в попытке добавить абсолютный путь AppleScriptEngine.jar в качестве атрибута к Class-Path; вместо этого правильное решение - добавить в качестве атрибута Class-Path только абсолютный путь к папке, в которой находится интересующий нас файл Jar (внешний), а затем добавить имя этого файла Jar в качестве значения Rsrc-Class-Path. Я считаю, что это правильный способ ссылаться на внешние библиотеки в каждом случае, когда файл уже находится в файловой системе. Вот мой MANIFEST.MF:

Manifest-Version: 1.0

Rsrc-Class-Path: ./ AppleScriptEngine.jar

Class-Path: . /System/Library/Java/Extensions/

Rsrc-Main-Class: core.NotifierLauncher

Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Обратите внимание, что после Class-Path: перед точкой и после точки есть пробел. Это связано с тем, что пустое пространство - это способ, используемый в файле MANIFEST для разделения различных аргументов. Об этом аргументе нет дружественной документации

...