Указание пути к классам для классов внутри самого JAR - PullRequest
4 голосов
/ 26 января 2009

Если у меня есть класс org.foobar.MyClass и я хочу поместить его в файл JAR, нужно ли мне поместить его в каталог JAR / org / foobar / или я могу поместить его в / bin / org / foobar / и как-то указать / bin / как classpath внутри самого JAR?

Ответы [ 5 ]

3 голосов
/ 26 января 2009

вы можете включить свойство Class-Path в свой манифест, перечисляя файлы jar, от которых зависит ваше приложение. Пути будут считаться относительно местоположения вашего исполняемого JAR.

Например, если ваш app.jar содержит это в MANIFEST.MF:

Путь к классу: lib1.jar, lib / lib2.jar

Тогда JVM ожидает найти lib1.jar в том же каталоге, что и app.jar, и подкаталог с именем lib, содержащий lib2.jar.

1 голос
/ 26 января 2009

Обычный способ, которым все это делают - до сих пор я никогда не видел, чтобы JAR делал что-то другое - это помещать класс org.foobar.MyClass в файл JAR в каталоге JAR / org / foobar /. Я не могу представить себе вескую причину для того, чтобы сделать что-то по-другому, так как это мешало бы нормальному использованию этого JAR любым, кто не делает необычных вещей.

0 голосов
/ 26 января 2009

Зачем вы делаете последнее? Проще просто поместить его в правильный каталог на основе имени пакета, что позволяет избежать необходимости редактировать файл MANIFEST или выполнять какие-либо другие специальные настройки.

0 голосов
/ 26 января 2009

Имя в файле jar должно совпадать с именем класса. Если, конечно, вы не пишете собственный загрузчик классов, чтобы делать странные вещи.

Вы можете указать "каталог" в файле jar, используя URL-адрес jar. Однако я не думаю, что URLClassLoader обрабатывает это правильно (не пытался).

Функция, которая существует как стандартная, заключается в добавлении других jar-файлов в путь к классам, указав их в манифесте.

0 голосов
/ 26 января 2009

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

...