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/resourcesest ma solution préférée.
Remarque: en parlant de laisser la configuration du journal concret au client / utilisateur, vous devriez envisager de remplacer log4jpar slf4jdans votre application.
resourceset log4j.propertiesdans le dossier mentionné dans la réponse.
src/main/resourcesseront copiés par défaut verstarget/classes
Le simple fait de le placer src/main/resourcesle regroupera dans l'artefact. Par exemple, si votre artefact est un JAR, vous aurez le log4j.propertiesfichier à l'intérieur, perdant son point initial de rendre la journalisation configurable.
Je le mets généralement et je le src/main/resourcesconfigure 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-Pathentré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 resourcesrépertoire à votre chemin de classe dans votre configuration d'exécution: Run->Run Configurations...->Java Application->Newsélectionnez l' Classpathonglet, sélectionnez Advancedet accédez à votre src/resourcesré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/resourcesest l'endroit typique.
Résultats de la recherche de code Google :
src/main/resources/log4j.properties: 4877src/main/java/log4j.properties: 215 resourcespas non plus le resourcecas, si je me souviens bien.
resourcen'é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/>