web-dev-qa-db-fra.com

Si vous utilisez maven, vous mettez généralement log4j.properties sous Java ou ressources?

Où dois-je placer le fichier log4j.properties lors de l'utilisation des répertoires Maven conventionnels?

120
user496949

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.

133
Jan Galinski

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.

59
Zoltán

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: 4877
  • src/main/Java/log4j.properties: 215
25
splash

Les 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.

9
devastator

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).

5
Ali Shakiba

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);
1
ethemsulan