2010-11-06 5 views
0

J'ai une application contenue dans A.JAR. Ce fichier contient plusieurs dépendances, elles sont donc spécifiées dans le manifeste sous la forme "lib/B.JAR lib/C.JAR lib/D.JAR". J'ai mon répertoire d'installation avec A.JAR, et en dessous j'ai le répertoire lib avec les trois autres.Problème avec la configuration incrémentielle classpath lors de l'exécution d'un fichier jar

Je vais dans mon répertoire d'installation et lance "java -jar A.JAR" pour lancer l'application, et il commence à fonctionner. Cependant, il recherche log4j.properties pour configurer log4j. Maintenant, autant que je sache, log4j.properties doit être dans le classpath.

Supposons maintenant que je veux exécuter plusieurs instances de A.JAR, mais avec diverses propriétés log4j. J'ai donc installé 4 répertoires d'installation (inst1, inst2, ...) et j'ai mis A.JAR, un log4j.properties personnalisé et le répertoire lib dans chacun d'entre eux.

  1. Est-ce la bonne façon de procéder (oublier la copie elle-même, je peux le faire avec des liens symboliques)? Peut-être existe-t-il un moyen de dire à log4j de rechercher les propriétés dans un endroit spécifique en utilisant define (-D) en runtime?
  2. Si ce que j'ai décrit est une bonne configuration, comment puis-je l'exécuter? Java n'attrape pas le fichier log4j.properties dans son chemin de classe. courir "java -classpath. -jar A.JAR" n'était pas utile non plus.

Répondre

4

Vous pouvez utiliser la propriété système log4j.configuration pour définir les fichiers de propriétés que log4j doit utiliser.

Un exemple simple pour un fichier dans un répertoire serait:

java -Dlog4j.configuration=file:/c:/foobar.properties YOUR CLASS PATH -jar JAR FILE 

Pour plus d'informations, consultez le documentation. Vérifiez en particulier la section Procédure d'initialisation par défaut.

+0

Jetez également un coup d'œil au commutateur -Dlog4j.debug. Il peut être très utile de savoir où il cherche. – mschonaker

+0

+1 - c'est la bonne approche, bien que le PO puisse vouloir créer un script wrapper pour lancer l'application avec les différentes configs de consignation. –

+0

@Faisel - merci, je vais l'utiliser. –

Questions connexes