Wenn Sie Maven verwenden, legen Sie normalerweise log4j.properties unter Java oder Ressourcen ab?

Lesezeit: 7 Minuten

Benutzer-Avatar
Benutzer496949

Wo soll ich die Datei log4j.properties ablegen, wenn ich die herkömmlichen Maven-Verzeichnisse verwende?

Benutzer-Avatar
Jan Galinsky

src/main/resources ist die “Standardplatzierung” dafür.

Aktualisieren: Das obige beantwortet die Frage, aber es ist nicht die beste Lösung. Schauen Sie sich die anderen Antworten und die Kommentare dazu an … Sie würden wahrscheinlich nicht Ihre eigenen Protokollierungseigenschaften mit dem Glas versenden, sondern es dem Client (z. B. App-Server, Bühnenumgebung usw.) überlassen, die gewünschte Protokollierung zu konfigurieren. Also einlegen src/test/resources ist meine bevorzugte Lösung.

Notiz: Apropos, die konkrete Protokollkonfiguration dem Client/Benutzer zu überlassen, Sie sollten erwägen, sie zu ersetzen log4j mit slf4j in Ihrer Anwendung.

  • Ich habe festgestellt, dass kein Ressourcenverzeichnis erstellt werden kann. Muss ich das manuell machen?

    – Benutzer496949

    27. Februar 2011 um 9:31 Uhr

  • ja. Manuell erstellen resources und log4j.properties in dem in der Antwort genannten Ordner.

    – Nischant

    27. Februar 2011 um 9:49 Uhr


  • @ user496949: Dateien unter src/main/resources wird standardmäßig nach kopiert target/classes

    – spritzen

    27. Februar 2011 um 9:54 Uhr

  • Sofern Sie nicht beabsichtigen, Ihre log4j-Einstellungen als Teil Ihres Artefakts zu exportieren, ist es weitaus besser, sie unter src/test/resources abzulegen

    – David Viktor

    27. Februar 2011 um 10:16 Uhr

  • @FerasOdeh, um es von generierten Artefakten (Jars, Kriege usw.) auszuschließen und nur während des Testens zu verwenden, “es sei denn, Sie beabsichtigen, Ihre log4j-Einstellungen als Teil Ihres Artefakts zu exportieren”.

    – Ali Shakiba

    24. Februar 2012 um 6:01 Uhr

Benutzer-Avatar
Zoltán

Einfach reinstecken src/main/resources wird es im Artefakt bündeln. Wenn Ihr Artefakt zB ein JAR ist, haben Sie die log4j.properties darin enthaltene Datei, wodurch der ursprüngliche Punkt, die Protokollierung konfigurierbar zu machen, verloren geht.

Ich stecke es meistens ein src/main/resourcesund stellen Sie es so ein, dass es als Ziel 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 sieht, müssen Sie außerdem das Ausgabeverzeichnis zum Klassenpfad hinzufügen. Wenn Ihr Artefakt ein ausführbares JAR ist, haben Sie wahrscheinlich das maven-assembly-plugin verwendet, um es zu erstellen. Innerhalb dieses Plugins können Sie den aktuellen Ordner der JAR-Datei zum Klassenpfad hinzufügen, indem Sie eine hinzufügen Class-Path Manifest-Eintrag wie folgt:

<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 ist unabhängig konfigurierbar.

Um Ihre Anwendung direkt von Eclipse aus auszuführen, fügen Sie die resources Verzeichnis zu Ihrem Klassenpfad in Ihrer Laufkonfiguration: Run->Run Configurations...->Java Application->New wähle aus Classpath Registerkarte, auswählen Advanced und navigieren Sie zu Ihrer src/resources Verzeichnis.

  • Eine andere Möglichkeit wäre, es unter src/test/resources abzulegen, damit es nicht gebündelt wird.

    – Rogerpack

    5. Dezember 2014 um 17:24 Uhr

  • Wow. Dank dafür. Das war genau das, was ich brauchte!

    – Glückseligkeit

    17. Juli 2015 um 18:25 Uhr

  • @Zoltán, es fällt mir schwer, das Ausgabeverzeichnis zum Klassenpfad hinzuzufügen, wie Sie es empfohlen haben. Gibt es eine Möglichkeit, dies manuell zu tun, z. B. in die .classpath-Datei des jeweiligen Projekts zu gehen und dieses log4j-Ausgabeverzeichnis dort hinzuzufügen, damit log4j die .properties-Datei sehen kann, nachdem die App in eine .war-Datei gebündelt wurde. Auch das targetPath-Tag, falls der Wert unverändert verwendet wird ${project.build.directory} oder sollte auf den tatsächlichen Pfad bearbeitet werden, in dem sich das Projekt auf meinem lokalen Laufwerk befindet?

    – Ercross

    11. April 2020 um 11:03 Uhr

Benutzer-Avatar
Spritzen

Einige “Data Mining”-Konten dafür src/main/resources ist der typische Ort.

Ergebnisse an Google-Codesuche:

  • src/main/resources/log4j.properties: 4877
  • src/main/java/log4j.properties: 215

  • Wie unterscheidet sich diese Antwort in irgendeiner Hinsicht von der vor 20 Minuten? Außerdem ist es resources nicht resourcewenn ich mich richtig erinnere.

    – Nischant

    27. Februar 2011 um 9:48 Uhr


  • @Nishant: es ist nicht anders, denn als ich das Antwortfeld geöffnet habe, habe ich den PC verlassen. Nachdem ich zurückgekommen war und die Frage beantwortet hatte, übersah ich, dass die Frage bereits beantwortet war. resource war nur ein Tippfehler.

    – spritzen

    27. Februar 2011 um 9:59 Uhr

  • Ich würde vorschlagen, etwas über Maven, das Maven-Compiler-Plugin, Konventionen für das Layout von Maven-Projekten zu lesen. Sehen Sie sich vielleicht an, was wohin unter “Ziel” gehört, wenn Ihr Artefakt gebaut wird. Dann könnten Sie vielleicht Ihre Antwort ändern.

    – David Viktor

    27. Februar 2011 um 11:32 Uhr


  • Die richtige Antwort ist src/xxx/resources – das ist keine Konvention. Sehen: maven.apache.org/plugins/maven-resources-plugin/examples/… – hier kann ‘xxx’ ‘main’ oder ‘test’ sein. Sofern Sie keine vorkonfigurierten Protokollierungsebenen bereitstellen möchten, ist es im Allgemeinen klüger, die Protokollierung wie für das Testen erforderlich zu konfigurieren – über „src/test/resources“ – und dem Verbraucher Ihres Artefakts zu erlauben, die Protokollierungsebene festzulegen.

    – David Viktor

    27. Februar 2011 um 17:19 Uhr


  • Google-Ergebnisse für „Von einer Brücke springen“: 18.200.000. Google-Ergebnisse für „Nicht von einer Brücke springen“: 137.000

    – djjek

    11. Januar 2013 um 0:35 Uhr

Benutzer-Avatar
Verwüster

Die für die Initialisierung des Projekts verwendeten Ressourcen werden vorzugsweise eingesetzt src/main/resources Mappe. Um das Laden dieser Ressourcen während des Builds zu ermöglichen, kann man 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> 

Andere .properties-Dateien können auch in diesem Ordner aufbewahrt werden, der für die Initialisierung verwendet wird. Filtering wird auf true gesetzt, wenn Sie einige Variablen in den Eigenschaftendateien des Ressourcenordners haben und sie aus den Profilfilter-Eigenschaftsdateien füllen möchten, die in src/main/filters gespeichert sind, das als festgelegt ist Profile aber es ist ein ganz anderer Anwendungsfall. Im Moment kannst du sie ignorieren.

Dies ist eine großartige Ressource Maven-Ressourcen-Pluginses ist nützlich, stöbern Sie einfach auch in anderen Abschnitten.

Benutzer-Avatar
Ali Shakiba

Wenn Ressourcendateien an einem anderen Ort abgelegt werden, ist dies nicht die beste Lösung, 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.

Benutzer-Avatar
ethemsulan

Wenn Ihre log4j.properties- oder log4j.xml-Datei 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);

Benutzer-Avatar
Challa Purushothham

Fügen Sie den folgenden Code aus den Ressourcen-Tags in Ihrer pom.xml innerhalb von Build-Tags hinzu. Das bedeutet also, dass sich Ressourcen-Tags innerhalb von Build-Tags in Ihrer pom.xml befinden müssen

<build>
    <resources>
        <resource>
            <directory>src/main/java/resources</directory>
                <filtering>true</filtering> 
         </resource>
     </resources>
<build/>

1335320cookie-checkWenn Sie Maven verwenden, legen Sie normalerweise log4j.properties unter Java oder Ressourcen ab?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy