Où dois-je placer le fichier log4j.properties lorsque j'utilise les répertoires Maven conventionnels?
Où dois-je placer le fichier log4j.properties lorsque j'utilise les répertoires Maven conventionnels?
Réponses:
src/main/resources
est le "placement standard" pour cela.
Mise à jour: ce qui précède répond à la question, mais ce n'est pas la meilleure solution. Consultez les autres réponses et les commentaires à ce sujet ... vous ne livreriez probablement pas vos propres propriétés de journalisation avec le fichier jar, mais laisseriez au client (par exemple, serveur d'application, environnement de scène, etc.) le soin de configurer la journalisation souhaitée. Ainsi, l'introduire src/test/resources
est ma solution préférée.
Remarque: en parlant de laisser la configuration du journal concret au client / utilisateur, vous devriez envisager de remplacer log4j
par slf4j
dans votre application.
resources
et log4j.properties
dans le dossier mentionné dans la réponse.
src/main/resources
seront copiés par défaut verstarget/classes
Le simple fait de le placer src/main/resources
le regroupera dans l'artefact. Par exemple, si votre artefact est un JAR, vous aurez le log4j.properties
fichier à l'intérieur, perdant son point initial de rendre la journalisation configurable.
Je le mets généralement et je le src/main/resources
configure pour qu'il soit affiché sur la cible comme suit:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
De plus, pour que log4j le voie réellement, vous devez ajouter le répertoire de sortie au chemin de classe. Si votre artefact est un JAR exécutable, vous avez probablement utilisé le plugin maven-assembly-plugin pour le créer. Dans ce plugin, vous pouvez ajouter le dossier actuel du JAR au chemin de classe en ajoutant une Class-Path
entrée de manifeste comme ceci:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Maintenant, le fichier log4j.properties sera juste à côté de votre fichier JAR, configurable indépendamment.
Pour exécuter votre application directement depuis Eclipse, ajoutez le resources
répertoire à votre chemin de classe dans votre configuration d'exécution: Run->Run Configurations...->Java Application->New
sélectionnez l' Classpath
onglet, sélectionnez Advanced
et accédez à votre src/resources
répertoire.
${project.build.directory}
ou doit-elle être modifiée sur le chemin réel du projet dans mon lecteur local?
Certains comptes «d'exploration de données» pour qui src/main/resources
est l'endroit typique.
Résultats de la recherche de code Google :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
pas non plus le resource
cas, si je me souviens bien.
resource
n'était qu'une faute de frappe.
Les ressources utilisées pour l'initialisation du projet sont de préférence placées dans le dossier src / main / resources . Pour activer le chargement de ces ressources lors de la construction, on peut simplement ajouter des entrées dans le pom.xml dans le projet maven en tant que ressource de construction
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
D'autres fichiers .properties peuvent également être conservés dans ce dossier utilisé pour l'initialisation. Le filtrage est défini sur true si vous souhaitez avoir certaines variables dans les fichiers de propriétés du dossier de ressources et les remplir à partir des fichiers de propriétés des filtres de profil, qui sont conservés dans src / main / filters qui est défini comme profils, mais il s'agit d'un cas d'utilisation complètement différent. . Pour l'instant, vous pouvez les ignorer.
C'est un excellent plugin de ressources maven , c'est utile, il suffit de parcourir d'autres sections aussi.
Lorsque placer des fichiers de ressources dans un autre emplacement n'est pas la meilleure solution que vous puissiez utiliser:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Par exemple, lorsque les fichiers de ressources (par exemple jaxb.properties) pénètrent profondément dans les packages avec les classes Java.
Si votre fichier log4j.properties ou log4j.xml ne se trouve pas sous src / main / resources, utilisez ce PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Ajoutez le code ci-dessous à partir des balises de ressources dans votre pom.xml à l'intérieur des balises de construction. cela signifie donc que les balises de ressources doivent être à l'intérieur des balises de construction dans votre pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>