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/resources
meine bevorzugte Lösung , es einzulegen.
Hinweis: Das Sprechen der konkreten log Config an den Client / Benutzer verlassen, sollten Sie ersetzen betrachten log4j
mit slf4j
in Ihrer Anwendung.
resources
und log4j.properties
in dem in der Antwort genannten Ordner.
src/main/resources
werden standardmäßig kopiert nachtarget/classes
Durch einfaches Einlegen src/main/resources
wird 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/resources
und 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-Path
Manifesteintrag 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 resources
Verzeichnis Ihrem Klassenpfad in Ihrer Ausführungskonfiguration hinzu: Run->Run Configurations...->Java Application->New
Wählen Sie die Classpath
Registerkarte aus, wählen Sie Advanced
Ihr src/resources
Verzeichnis 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/resources
sind der typische Ort.
Ergebnisse bei der Google-Codesuche :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
nicht resource
, wenn ich mich richtig erinnere.
resource
war 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/>