Доступ к файлу .properties на том же уровне, что и рабочий каталог - PullRequest
1 голос
/ 10 июня 2009

Я работаю над проектом Java, который хочу доставить моему клиенту в виде файла .jar. Однако я хочу позволить клиенту иметь возможность изменять параметры программы без необходимости перекомпиляции или повторного создания .jar. По сути, я хочу иметь возможность загружать файлы .properties из классов внутри .jar, но размещать эти файлы .properties вне .jar и даже вне рабочего каталога.

Я тестировал свои попытки в Eclipse, что может быть причиной некоторых проблем, но я не вижу, как это происходит в данный момент. Моя установка следующая. У меня есть один проект, который содержит несколько классов, из которых я строю файл .jar. У меня есть файл .properties, который используется для создания ResourceBundle всякий раз, когда создается класс для .jar. Я указываю, что дополнительный каталог, "conf /", должен быть включен в путь к классу .jar в манифесте .jar.

Как только файл .jar собран, он копируется в каталог lib / другого проекта, который я использую для тестирования. Этот тестовый проект включает файл .jar в виде библиотеки («Добавить внешние файлы Jar.») В путь сборки Java. Файл .properties находится в каталоге conf /, который находится на том же уровне, что и lib /, src / и bin /, но я не могу получить его там. Единственный способ заставить его работать - это найти conf / в src / (и bin /), но я бы хотел использовать его на один уровень выше. Возможно ли это?

Вот запись в файле манифеста .jar ...

Class-Path: ../conf/

Вот вызов ResourceBundle, который я пытался (не работал) ...

rb = ResourceBundle.getBundle("..conf.BaseProject");

Вот структура каталогов, которая работает сейчас (имена были изменены, чтобы защитить невинных) ...

/Project
/Project/bin
/Project/bin/conf
/Project/bin/conf/BaseProject.properties
/Project/bin/TestClass.class
/Project/lib
/Project/lib/BaseProject.jar

Вот макет каталога, который я хочу (опять же, имена файлов не важны) ...

/Project
/Project/bin
/Project/bin/TestClass.class
/Project/conf
/Project/conf/BaseProject.properties
/Project/lib
/Project/lib/BaseProject.jar

Ответы [ 2 ]

2 голосов
/ 10 июня 2009

Вы можете получить его , используя Classloader .

1 голос
/ 10 июня 2009

Мне нравится Spring's ClassPathResource

...