Указание пути к классу для банки - PullRequest
4 голосов
/ 24 мая 2011

Я пытаюсь настроить путь к классу JAR, чтобы мой ResourceBundle мог выбрать из него файлы свойств.

Если я запускаю его из файлов .class и указываю флаг -cp, он работает нормальнои System.err.println(System.getProperty("java.class.path")); напечатает путь, указанный в флаге -cp.

Если я попытаюсь создать для него файл jar, System.err.println(System.getProperty("java.class.path")); всегда печатает путь файла jar и файлы свойствне подобраны.

Кажется, что если вы запускаете его как файл jar, вы не можете указать флаг -cp (как я и надеялся, так как обычно переключаются файлы свойствиспользовался).Я попытался указать его в манифесте jar, но он все еще не работает.

Вот код и манифест из тестового jar, который, похоже, не работает:

public final class Test {
    public static void main(final String[] args) {
        System.err.println(System.getProperty("java.class.path"));
    }
}

Manifest-Version: 1.0
Created-By: 1.6.0_20 (Sun Microsystems Inc.)
Main-Class: Test
Class-Path: /home/ajanuary/Projects/test/

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

Ответы [ 5 ]

5 голосов
/ 24 мая 2011

Если вы используете -jar, -cp игнорируется:

-jar
Выполните программу, инкапсулированную в файл JAR. Первый аргумент имя файла JAR вместо имя класса запуска. Для этого возможность работать, манифест JAR-файл должен содержать строку Форма Main-Class: имя класса. Вот, имя класса идентифицирует класс, имеющий public static void main(String[] args) метод, который служит вашим отправная точка приложения. Увидеть Справочная страница инструмента Jar и банка след Java-учебник для информация о работе с Jar файлы и Jar-файлы манифестов. Когда ты используйте эту опцию, файл JAR является источник всех пользовательских классов и прочее настройки пути к классам пользователей игнорируются.

Источник: java - средство запуска приложений Java

2 голосов
/ 24 мая 2011

Я бы вместо этого прочитал свойство в моем Java-приложении (это свойство могло бы указывать, откуда следует загружать ресурсы).

Примером выполнения приложения будет: java -Dkey=value -jar application.jar

1 голос
/ 24 мая 2011

Да, а для оболочки ~ означает $ HOME, но для java это ничего не значит.

1 голос
/ 24 мая 2011

Вы не можете использовать подстановочные знаки classpath в манифесте.

Посмотрите на Установка classpath для получения дополнительной информации о том, как работает classpath:

подстановочные знаки пути к классу не учитываются в jar-манифесте Class-Pathзаголовок.

0 голосов
/ 24 мая 2011

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

...