Проблема с упаковкой Java

У меня есть приложение, которое я разработал. В настоящее время он развернут со всеми своими файлами конфигурации (в том числе log4j.propertiesиспользуемыми некоторыми внешними библиотеками, которые я использую) в том же каталоге, что и мое приложение.

Итак, у меня есть binкаталог, содержащий мои app.jar, плюс несколько файлов свойств, плюс libкаталог со всеми моими внешними банками. Внешние jar указаны в classpath, указанном в app.jarфайле манифеста.

Теперь полномочия решили, что новая структура будет директорией binс только что app.jar, с директорией libна том же уровне (то есть ../libотносительно bin) для внешних jar и ../etcкаталогом для файлов конфигурации.

Это достаточно просто, я думал - я изменил все пути пути к классам от ./lib/<jarname>к ../lib/<jarname>, и добавил ../etcк классам , а также.

Проблема в том, что теперь все jar-файлы, использующие log4j, не работают - они не видят log4j.propertiesфайл - потому что, я подозреваю, путь к классам для for app.jarне влияет на путь к классам для внешних jar- файлов (возможно?), И ранее они находили его просто потому, что он был в "."

Какие-нибудь мысли?

13.10.2009 07:23:44
3 ОТВЕТА
РЕШЕНИЕ

Вы можете поместить log4j.properties в любое место, если оно находится в пути к классам. поэтому, как предложил @skaffman, поместите файл свойств log4j в каталог etc, который уже находится в вашем classpath.

Альтернативой использованию PropertyConfigurator является установка этого свойства syetm при запуске приложения.

-Dlog4j.configuration=log4j.properties
1
13.10.2009 07:52:14

Итак, проблема в том, что Log4J теперь больше не находит файл конфигурации (log4j.properties) автоматически?

Насколько я знаю, Log4J по умолчанию ищет в каталогах, которые находятся в classpath для файла log4j.properties. Попробуйте добавить каталог ../etc в classpath в файле манифеста вашего JAR.

См. Также « Процедура инициализации по умолчанию» в Руководстве по Log4J, в которой объясняется, как Log4J ищет файл конфигурации и как вы можете это изменить.

0
13.10.2009 07:30:28

log4j.properties должен быть где-то в пакете по умолчанию, что в вашем случае, вероятно, означает в файле JAR где-то в корневом каталоге этого файла JAR.

Лучшим решением было бы вставить его в etcкаталог, а затем явно настроить log4j, чтобы использовать его из этого места. Вы можете сделать это с помощью PropertyConfigurator - запустите его при запуске приложения по имени файла, URL-адресу, как вам удобно.

0
13.10.2009 07:32:13