Où dois-je placer le fichier log4j.properties lors de l'utilisation des répertoires Maven conventionnels?
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 fourniriez probablement pas vos propres propriétés de journalisation avec le fichier jar, mais le laisseriez au client (par exemple, serveur d'applications, environnement d'étape, etc.) pour configurer la journalisation souhaitée. Ainsi, en le mettant dans src/test/resources
est ma solution préférée.
Remarque: En parlant de laisser la configuration concrète du journal au client/utilisateur, vous devriez envisager de remplacer log4j
avec slf4j
dans votre application.
Il suffit de le mettre dans src/main/resources
le regroupera à l'intérieur de l'artefact. Par exemple. si votre artefact est un JAR, vous aurez le log4j.properties
fichier à l’intérieur de celui-ci, perd son objectif initial de rendre la journalisation configurable.
Je le mets habituellement dans src/main/resources
, et configurez-le en sortie pour cibler 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 puisse le voir, vous devez ajouter le répertoire de sortie au chemin de classe. Si votre artefact est un fichier JAR exécutable, vous avez probablement utilisé le plugin maven-Assembly-Assembly pour le créer. Dans ce plugin, vous pouvez ajouter le dossier actuel du fichier JAR au chemin de classe en ajoutant un Class-Path
entrée 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, indépendamment configurable.
Pour exécuter votre application directement à partir d’Eclipse, ajoutez le répertoire resources
à votre chemin de classe dans votre configuration d’exécution: Run->Run Configurations...->Java Application->New
sélectionnez l’onglet Classpath
, sélectionnez Advanced
et naviguez jusqu’à votre src/resources
répertoire.
Quelques comptes de "data mining" pour ce src/main/resources
est le lieu typique.
Résultats sur recherche de code Google :
src/main/resources/log4j.properties
: 4877src/main/Java/log4j.properties
: 215Les ressources utilisées pour initialiser le projet sont de préférence placées dans le dossier src/main/resources . Pour permettre le chargement de ces ressources pendant la construction, il suffit d'ajouter des entrées dans le projet pom.xml du 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 inclure certaines variables dans les fichiers de propriétés du dossier de ressources et les renseigner à 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 totalement différent. Pour l'instant, vous pouvez les ignorer.
C'est une excellente ressource plugins de ressources maven , c'est utile, il suffit de parcourir d'autres sections aussi.
Lorsque placer des fichiers de ressources à un autre emplacement n'est pas la meilleure solution, vous pouvez 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 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);