Путь к классу файла Java Manifest и как он определяет относительные каталоги
Как путь к классам в файле MANIFEST.MF определяет относительное местоположение?
1) Скажем, у меня есть банка с банкой внутри lib/somejar.jar
и OFC файл манифеста находится внутри META-INF/MANIFEST.MF
, Как бы я установить classpath....? Будет ли это Class-path: lib/somejar.jar
или же ../lib/somejar.jar
?
2) Предположим, что в somejar.jar также есть другие jar-файлы, от которых зависит основной jar-файл. И, конечно, somejar.jar также имеет свой собственный файл MANIFEST.MF с правильно установленным полем Class-path. Теперь давайте скажем, что исходный основной файл JAR во время выполнения должен иметь доступ к одному из этих файлов JAR, сможет ли он это делать, пока somejar.jar находится в classpath main.jar? Или относительные каталоги испорчены, так как основной jar работает под именем somejar.jar, больше не root?
незначительное обновление: все это будет выполняться в веб-среде на сервере приложений.
1 ответ
Делая это "простая ваниль", вы не можете иметь JAR внутри JAR. Вам нужно либо поместить его наружу по известному пути относительно основного JAR-файла, либо извлечь содержимое JAR-файла в основной JAR-файл.
Но начиная с Eclipse 3.5 вы можете сделать это с помощью встроенного трюка. Отметьте опцию 2nd Library Handling, когда вы выбираете Export> Runnable JAR file.
При выборе Package требуемых библиотек в сгенерированном JAR, Eclipse добавит специальный загрузчик классов, который будет загружать эти JAR прозрачно для вас перед выполнением основного класса. Это делает это с помощью JarRsrcLoader
,