2015-04-29 3 views
3

Я строю файл jar с градиентом, мое приложение использует log4j. Первоначально мой log4j.properties был встроен в мой файл jar. Я переместил его на улицу, чтобы иметь возможность модифицировать его на производстве. Я обновил файл META-INF/MANIFEST.MF встроенных в моем файле фляга, чтобы отразить это:Как переместить log4j.properties вне файла jar?

Class-Path: lib/log4j-1.2.1 lib/slf4j-api-1.4.2.jar 
      lib/slf4j-api-1.5.6.jar lib/slf4j-log4j12-1.5.6.jar 
      lib/log4j-1.2.14.jar 
      ... 
      lib/log4j.properties 

Моего дерево файлы выглядят следующим образом на windows7 32-битной машине:

я начинаю мое приложение с помощью этой команды:

java -Dlog4j.configuration='lib\log4j.properties' -Dlog4j.debug=true -jar myapp.jar > logs/output.log 

мой logs/output.log говорит, что log4j не смог найти свой файл свойств:

log4j: Trying to find ['lib\log4j.properties'] using context classloader [email protected] 
log4j: Trying to find ['lib\log4j.properties'] using [email protected] class loader. 
log4j: Trying to find ['lib\log4j.properties'] using ClassLoader.getSystemResource(). 
log4j: Could not find resource: ['lib\log4j.properties']. 

Я также попытался с:

-Dlog4j.configuration='lib/log4j.properties' 
-Dlog4j.configuration='log4j.properties' 
-Dlog4j.configuration=log4j.properties 

Когда я вставить файл в банке, он работает:

log4j: Trying to find [log4j.properties] using context classloader [email protected] 
log4j: Using URL [jar:file:/C:/Users/User/Desktop/myapp/myapp.jar!/log4j.properties] for automatic log4j configuration. 
log4j: Reading configuration from URL jar:file:/C:/Users/User/Desktop/myapp/myapp-2.1.9.jar!/log4j.properties 
log4j: Parsing for [root] with value=[debug, A]. 

Но мне нужно его снаружи ... Любая идея?

+0

Поскольку файл jar представляет собой просто архив zip, большинство программ сжатия/распаковки позволят вам редактировать текстовые файлы внутри банки. –

ответ

4

Попробуйте это:

-Dlog4j.configuration=file:lib/log4j.properties 

но мне интересно: это определение класса Path в манифесте действительно работает? Jars, да, это стандартно, но работает ли он и на log4j.properties?

+0

'файл:' префикс работает. Я не знаю, работают ли определения класса пути для 'log4j.properties', это мой оригинальный вопрос :-) –

+1

Я никогда не пробовал маршрут Class-Path, tbh. Документация Oracle на https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html говорит только о файлах JAR в заголовке Class-Path. Вам нужно что-то вроде каталога lib в пути к классам. Я просто попробовал его здесь с манекеном и не смог заставить его работать. – wallenborn

Смежные вопросы