#java #eclipse #properties #jar #war
#java #eclipse #свойства #jar #Война
Вопрос:
У меня есть два проекта eclipse. Одним из них является библиотека, содержащая файлы свойств. Второй — это динамический веб-проект.
В моей библиотеке есть несколько настраиваемых классов, которые загружают свои параметры конфигурации из файлов свойств.
String path = "Resources/Properties/Main.properties";
InputStream stream = getClass().getClassLoader().getResourceAsStream(path);
Properties properties = new Properties();
properties.load(stream);
Моя дилемма заключается в том, что когда я экспортирую свой веб-проект в WAR, проект зависимой библиотеки упаковывается в jar и помещается внутри моей WAR в каталог «WEB-INF / lib», что означает, что я не могу загружать их, как обычно.
Мои идеи:
-
Скопируйте эти файлы свойств в мои веб-проекты, что очень болезненно, поскольку эта библиотека предназначена для использования во многих проектах, я не хочу, чтобы несколько экземпляров файлов свойств были разбросаны по проектам.
-
Размещать файлы свойств в некотором системном фиксированном пути на сервере, по-прежнему является плохим решением, затрудняет развертывание этого приложения.
Есть ли способ загрузить файлы свойств из файлов JAR или, может быть, способ указать eclipse project явно экспортировать файлы свойств из моей библиотеки в мой веб-проект? Я был бы признателен за вашу помощь и идеи по этому вопросу.
Комментарии:
1. getResourceAsStream должен искать внутри jars, ища путь к классу. Если вы разархивировали jar, в каком каталоге находится файл свойств?
2. Это будет «META-INF /Resources / Properties /Main.properties». Я пробовал это, но это не помогло.
3. Я не знаю, как создается ваш jar. вы могли бы попробовать изменить свой путь на «META-INF /Resources/Properties /Main.properties» или «/META-INF /Resources/ Properties /Main.properties». Или посмотрите, можете ли вы поместить его в более стандартное место, отличное от meta-inf. Также не является соглашением Java использовать заглавные буквы для каталогов, т.е. Resource -> resource.
Ответ №1:
Это работает просто отлично, если вы загружаете файл ресурсов из classpath . Он проходит через путь к классу и ищет соответствующий ресурс. Моей проблемой было столкновение ресурсов classpath, у меня были классы с похожим package.classname и ресурсы с похожим путем и именем файла. При загрузке этих ресурсов JVM автоматически игнорирует дублирующиеся объекты из библиотек .jar. Поэтому будьте внимательны и остерегайтесь неуникальных объектов при составлении сложной структуры библиотеки.