Как поместить папки внутри файла JAR в путь к классам? - PullRequest
0 голосов
/ 21 июля 2011

У меня старое java-приложение, в котором dcm4che используется в качестве библиотеки.Библиотека dcm4che - это не просто файл jar.Это папка, содержащая файлы JAR и другие папки с файлами свойств и классами в разных папках.Я использую WindowsXP и Java 1.6.

Когда мы запускаем наше приложение, нам нужно поместить эти папки, файлы JAR в путь к классам, выполнив что-то вроде этого:

set CLASSPATH=.;%PROJ_HOME%\classes;^
%THIRDPARTY_HOME%\dcm4che;^
%THIRDPARTY_HOME%\dcm4che\classes;^
%THIRDPARTY_HOME%\dcm4che\resources;^

Теперь я пытаюсьположить все их в один файл JAR, чтобы упростить контроль источников.Поэтому я создаю файл manifest.txt со следующим содержимым:

Class-Path: classes;resources;lib\dcm4che.jar;getopt.jar

Затем я создаю dcm4che.jar, запустив jar:

jar -cfm dcm4che.jar manifest.txt *

Создается файл dcm4che.jar.Я проверяю результат, извлекая все содержимое и проверяя файл манифеста, и мой путь к классам находится там:

Manifest-Version: 1.0
Class-Path: classes;resources;lib\dcm4che.jar;getopt.jar
Created-By: 1.6.0_25 (Sun Microsystems Inc.)

Затем я изменяю путь к классам приложения, чтобы он указывал на новый сгенерированный файл dcm4che.jar, и удаляю эти старые записи.

Когда я запускаю его, я получаю NoClassDefFoundError.Но этот класс находится в папке классов внутри нового созданного файла JAR.

Я что-то пропустил?

Ответы [ 3 ]

0 голосов
/ 22 июля 2011

Вы можете использовать ONE-JAR для упаковки файлов классов и файлов JAR в ваш конечный исполняемый файл.

0 голосов
/ 22 июля 2011

JAR-файл - это, по сути, zip-файл.

Существуют различные утилиты, которые позволяют монтировать zip-файлы в качестве диска только для чтения или DVD-диска.

Аналогично, существуют утилиты, которыесмонтировать образы ISO как CD или DVD.Я зависим от них, потому что они очень полезны.Особенно, когда часть программного обеспечения настаивает на чтении своего DVD, и у меня есть несколько таких программ, которые я хочу запустить одновременно, и у меня есть только один привод DVD / CD.

После установки в качестве привода ПЗУ, хм... не нужно говорить дальше.

0 голосов
/ 21 июля 2011

Java не поддерживает банки в банках. Итак, самый простой способ - развернуть этот файл и добавить все его содержимое в classpath. Я думаю, что вы можете легко сделать это с помощью сценария. В любом случае, у вас есть скрипт, который запускает ваше приложение, верно? Поэтому добавьте несколько строк, расширяющих этот файл, во временную или домашнюю директорию пользователя.

Если вы не хотите этого делать или это запрещено по другим причинам, вам нужно реализовать собственный загрузчик классов, который загружает кусочки из вложенного фляги. Это не так сложно сделать, но это требует определенных усилий. Вы можете использовать VFS из Джакарты. Это упростит реализацию.

Но я бы порекомендовал вам первый способ.

...