Wo soll ich die Datei log4j.properties ablegen, wenn ich die herkömmlichen Maven-Verzeichnisse verwende?
Wo soll ich die Datei log4j.properties ablegen, wenn ich die herkömmlichen Maven-Verzeichnisse verwende?
Antworten:
src/main/resources ist die "Standardplatzierung" dafür.
Update: Das Obige beantwortet die Frage, ist aber nicht die beste Lösung. Schauen Sie sich die anderen Antworten und Kommentare dazu an ... Sie würden wahrscheinlich nicht Ihre eigenen Protokollierungseigenschaften mit dem JAR versenden, sondern es dem Client überlassen (z. B. App-Server, Bühnenumgebung usw.), um die gewünschte Protokollierung zu konfigurieren. Daher ist es src/test/resourcesmeine bevorzugte Lösung , es einzulegen.
Hinweis: Das Sprechen der konkreten log Config an den Client / Benutzer verlassen, sollten Sie ersetzen betrachten log4jmit slf4jin Ihrer Anwendung.
resourcesund log4j.propertiesin dem in der Antwort genannten Ordner.
src/main/resourceswerden standardmäßig kopiert nachtarget/classes
Durch einfaches Einlegen src/main/resourceswird es im Artefakt gebündelt. Wenn Ihr Artefakt beispielsweise ein JAR ist, haben Sie daslog4j.properties Datei darin, wodurch der ursprüngliche Punkt verloren geht, an dem die Protokollierung konfigurierbar ist.
Normalerweise lege ich es ein src/main/resourcesund setze es so, dass es wie folgt ausgegeben wird:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Damit log4j es tatsächlich sehen kann, müssen Sie außerdem das Ausgabeverzeichnis zum Klassenpfad hinzufügen. Wenn es sich bei Ihrem Artefakt um eine ausführbare JAR handelt, haben Sie wahrscheinlich das Maven-Assembly-Plugin verwendet, um es zu erstellen. In diesem Plugin können Sie den aktuellen Ordner der JAR zum Klassenpfad hinzufügen, indem Sie einen Class-PathManifesteintrag wie folgt hinzufügen :
<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>
Jetzt befindet sich die Datei log4j.properties direkt neben Ihrer JAR-Datei und kann unabhängig konfiguriert werden.
Um Ihre Anwendung direkt von Eclipse aus auszuführen, fügen Sie das resourcesVerzeichnis Ihrem Klassenpfad in Ihrer Ausführungskonfiguration hinzu: Run->Run Configurations...->Java Application->NewWählen Sie die ClasspathRegisterkarte aus, wählen Sie AdvancedIhr src/resourcesVerzeichnis aus und navigieren Sie zu ihm .
${project.build.directory}oder auf den tatsächlichen Pfad bearbeitet werden, auf dem sich das Projekt auf meinem lokalen Laufwerk befindet?
Einige "Data Mining" -Konten dafür src/main/resourcessind der typische Ort.
Ergebnisse bei der Google-Codesuche :
src/main/resources/log4j.properties: 4877src/main/java/log4j.properties: 215 resourcesnicht resource, wenn ich mich richtig erinnere.
resourcewar nur ein Tippfehler.
Die zum Initialisieren des Projekts verwendeten Ressourcen werden vorzugsweise im Ordner src / main / resources abgelegt . Um das Laden dieser Ressourcen während des Builds zu ermöglichen, können Sie einfach Einträge in der pom.xml im Maven-Projekt als Build-Ressource hinzufügen
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
In diesem Ordner können auch andere .properties-Dateien gespeichert werden, die für die Initialisierung verwendet werden. Die Filterung wird auf true gesetzt, wenn Sie einige Variablen in den Eigenschaftendateien des Ressourcenordners haben und sie aus den Eigenschaftendateien der Profilfilter füllen möchten, die in src / main / filter gespeichert sind, die als Profile festgelegt sind. Dies ist jedoch ein ganz anderer Anwendungsfall . Im Moment können Sie sie ignorieren.
Dies ist ein großartiges Ressourcen- Maven-Ressourcen-Plugin . Es ist nützlich. Durchsuchen Sie einfach auch andere Abschnitte.
Wenn das Speichern von Ressourcendateien an einem anderen Speicherort nicht die beste Lösung ist, die Sie verwenden können:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Zum Beispiel, wenn Ressourcendateien (z. B. jaxb.properties) zusammen mit Java-Klassen tief in Pakete eindringen.
Wenn Ihre Datei log4j.properties oder log4j.xml nicht unter src / main / resources gefunden wird, verwenden Sie diese PropertyConfigurator.configure ("log4j.xml").
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Fügen Sie den folgenden Code aus den Ressourcen-Tags in Ihrer pom.xml in Build-Tags hinzu. Das bedeutet, dass sich Ressourcen-Tags innerhalb der Build-Tags in Ihrer pom.xml befinden müssen
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>