Путь к классу файла Java Manifest и как он определяет относительные каталоги - PullRequest
1 голос
/ 12 августа 2010

Как путь к классам в файле MANIFEST.MF определяет относительное местоположение?

1) Скажем, у меня есть JAR с банкой внутри lib/somejar.jar, и, разумеется, файл манифеста находится внутри META-INF/MANIFEST.MF. Как бы я установить classpath ....? Это будет Class-path: lib/somejar.jar или ../lib/somejar.jar?

2) Допустим, в файле somejar.jar также есть другие банки, от которых зависит основной файл. И, конечно, somejar.jar также имеет свой собственный файл MANIFEST.MF с правильно установленным полем Class-path. Теперь давайте скажем, что исходный основной файл JAR во время выполнения должен иметь доступ к одному из этих файлов JAR, сможет ли он это делать, пока somejar.jar находится в classpath main.jar? Или относительные каталоги испорчены, так как основной jar работает под именем somejar.jar, больше не root?

Незначительное обновление: все это будет выполняться в веб-среде на сервере приложений.

1 Ответ

1 голос
/ 12 августа 2010

Делая это "простой ванилью", вы не можете иметь JAR внутри JAR. Вам нужно либо поместить его наружу по известному пути относительно основного JAR-файла, или извлечь содержимое JAR-файла в основной JAR-файл.

Но, начиная с Eclipse 3.5, вы можете сделать это с помощью встроенного трюка. Выберите опцию 2 Обработка библиотеки , если вы выберете Экспорт> Запускаемый файл JAR .

alt text

При выборе Упаковать необходимые библиотеки в сгенерированный JAR , тогда Eclipse добавит специальный загрузчик классов, который будет прозрачно загружать эти JAR-файлы перед выполнением основного класса. Это делается с помощью JarRsrcLoader.

...