Ich führe ein einfaches Java-Programm über die IntelliJ IDE über das Menü Ausführen-> Ausführen aus. Es funktioniert gut. Jetzt möchte ich log4j logging hinzufügen.
Ich habe einen Ressourcenordner unter meinem Projektstamm hinzugefügt. Ich habe eine log4j.properties-Datei in diesem Ordner hinzugefügt. Ich habe den Code geändert, um etwas zu protokollieren.
Wie kann IntelliJ angewiesen werden, den Ressourcenordner in den Klassenpfad aufzunehmen, damit die Eigenschaftendatei angezeigt wird?
Mit IntelliJ 8 könnte ich wie ein betrunkener Affe raten und es schließlich zum Laufen bringen. Ich habe jetzt 9 und bin völlig erfolglos. Ich habe es eine Stunde lang versucht. Wie wäre es mit einer Option "Zum Klassenpfad hinzufügen" irgendwo? / Rauch / Entlüftung / Schimpfen
quelle
Antworten:
Versuche dies:
quelle
Tatsächlich haben Sie mindestens zwei Möglichkeiten, die erste Möglichkeit wird von ColinD beschrieben. Sie konfigurieren lediglich den Ordner "resources" als Quellenordner in IDEA. Wenn die Ressourcenmuster die Erweiterung Ihrer Ressource enthalten, wird sie in das Ausgabeverzeichnis kopiert, wenn Sie festlegen, dass das Projekt- und Ausgabeverzeichnis automatisch ein Klassenpfad Ihrer Anwendung ist.
Eine andere übliche Methode besteht darin, den Ordner "resources" direkt zum Klassenpfad hinzuzufügen. Gehen Sie zu Projektstruktur | Module | Ihr Modul | Abhängigkeiten , klicken Sie auf Hinzufügen , Modulbibliothek mit einem Eintrag , und geben Sie den Pfad zum Ordner "Ressourcen" an.
Eine weitere Lösung wäre, die Datei log4j.properties direkt unter dem Quellstamm Ihres Projekts (im Standardpaketverzeichnis) abzulegen . Es ist das gleiche wie die erste Art und Weise , außer Sie eine andere Quelle Wurzel in den Modul nicht hinzufügen müssen Pfade Einstellungen, die Datei in das Ausgabeverzeichnis auf Make kopiert werden.
Wenn Sie mit verschiedenen log4j Konfigurationen testen möchten, kann es einfacher sein , um eine benutzerdefinierte Konfigurationsdatei direkt in die angeben Run / Debug - Konfiguration , VM - Parameter abgelegt , wie:
-Dlog4j.configuration=file:/c:/log4j.properties
.quelle
Ich habe das gleiche Problem und es nervt mich enorm !!
Ich habe immer gedacht, ich wäre als Antwort 2 zu tun. Das funktionierte früher in Intellij 9 (jetzt mit 10).
Ich habe jedoch herausgefunden, dass das Hinzufügen dieser Zeile zu meiner Maven Pom-Datei hilft:
quelle
Ich habe ziemlich viel Zeit damit verbracht, herauszufinden, wie das in Intellij 13x geht. Ich habe die Eigenschaftendateien anscheinend nie zu den Artefakten hinzugefügt, für die sie erforderlich waren. Dies ist ein separater Schritt in Intellij. Das folgende Setup funktioniert auch, wenn Sie eine Eigenschaftendatei haben, die von mehreren Modulen gemeinsam genutzt wird.
quelle
Es gab eine ähnliche Herausforderung beim Hinzufügen von Dateien mit INI-Erweiterungen zum Klassenpfad. Diese Antwort wurde gefunden, indem sie zu Einstellungen -> Compiler -> Ressourcenmuster -> [...]; *. Ini hinzugefügt wird
quelle
Wenn Sie jemals das gleiche Problem mit Scala und SBT haben:
Gehen Sie zur Projektstruktur. Die Verknüpfung lautet (STRG + ALT + UMSCHALT + S).
Wählen Sie in der Liste ganz links Projekteinstellungen> Module
Wählen Sie in der Modulliste rechts davon das Modul Ihres Projektnamens (ohne Build) aus und wählen Sie die Registerkarte Quellen
Erweitern Sie in der Mitte den Ordner, der für mich das Stammverzeichnis Ihres Projekts ist
/home/<username>/IdeaProjects/<projectName>
Schauen Sie sich den Abschnitt Content Root auf der rechten Seite an. Die roten Pfade sind Verzeichnisse, die Sie nicht erstellt haben. Sie möchten die Eigenschaftendatei in einem Ressourcenverzeichnis ablegen. Also habe ich
src/main/resources
log4j.properties erstellt und eingefügt. Ich glaube, Sie können den Inhaltsstamm auch so ändern, dass er an einer beliebigen Stelle platziert wird (ich habe dies nicht getan).Ich habe meinen Code mit einer SBT-Konfiguration ausgeführt und meine Datei log4j.properties gefunden.
quelle
Für diejenigen unter Ihnen, die von Eclipse zu IntelliJ migrieren oder umgekehrt, ist hier ein Tipp, wenn Sie mit Eigenschaftendateien oder anderen Ressourcendateien arbeiten.
Es ist verrückt (es hat mich einen ganzen Abend gekostet, es herauszufinden), aber beide IDEs funktionieren sehr unterschiedlich, wenn es darum geht, nach Ressourcen- / Eigenschaftendateien zu suchen, wenn Sie lokal von Ihrer IDE oder während des Debuggens ausgeführt werden möchten. (Das Verpacken in ein .jar ist auch ganz anders, aber das ist besser dokumentiert.)
Angenommen, Sie haben eine relative Pfadverweisung wie diese in Ihrem Code:
(Dies ist praktisch, wenn Sie mit env-spezifischen .properties-Dateien arbeiten, die Sie nicht zusammen mit Ihrer JAR packen möchten.)
INTELLIJ
(Ich benutze 13.1, könnte aber für weitere Versionen gültig sein)
Die Datei xxxx.properties muss sich im PARENT-Verzeichnis des Projekts ROOT befinden, damit sie zur Laufzeit in IntelliJ zur Laufzeit abgerufen werden kann. (Im Projekt ROOT befindet sich der Ordner / src.)
FINSTERNIS
Eclipse ist nur glücklich, wenn sich die Datei xxxx.properties im Projekt ROOT selbst befindet.
Daher erwartet IntelliJ, dass die .properties-Datei 1 Ebene höher als Eclipse ist, wenn auf sie so verwiesen wird !!
Dies wirkt sich auch auf die Art und Weise aus, wie Sie Ihren Code ausführen müssen, wenn Sie dieselbe Codezeile (neuer FileInputStream ("xxxx.properties");) in Ihrer exportierten JAR-Datei haben. Wenn Sie agil sein und die .properties-Datei nicht mit Ihrer JAR-Datei verpacken möchten, müssen Sie die JAR-Datei wie folgt ausführen, um die .properties-Datei über die Befehlszeile korrekt zu referenzieren:
INTELLIJ EXPORTED JAR
ECLIPSE EXPORTED JAR
Wenn das von Eclipse exportierte ausführbare JAR nur erwartet, dass sich die referenzierte .properties-Datei am selben Speicherort befindet wie die .jar-Datei
quelle
Vielleicht ist dies ein bisschen unangebracht, da die Frage bereits beantwortet wurde, aber ich habe ein ähnliches Problem festgestellt. In meinem Fall wurden beim Kompilieren nur einige der Unit-Test-Ressourcen in den Ausgabeordner kopiert. Meine persistence.xml im META-INF- Ordner wurde kopiert, aber sonst nichts .
Am Ende "löste" ich das Problem, indem ich die problematischen Dateien umbenannte, das Projekt neu erstellte und dann die Dateinamen wieder in die ursprünglichen änderte. Fragen Sie mich nicht, warum das funktioniert hat, aber es hat funktioniert. Ich vermute, dass mein IntelliJ-Projekt irgendwie nicht mehr mit dem Dateisystem synchronisiert war und der Umbenennungsvorgang eine Art internen "Ressourcen-Rescan" auslöste.
quelle
Dies ist einer der dummen Fehler, die ich gemacht habe. Ich habe viel Zeit damit verbracht, dieses Problem zu beheben, und alle oben genannten Antworten ausprobiert, aber am Ende war es einer meiner vielen dummen Fehler.
Ich habe
org.apache.logging.log4j.Logger
(: fml :) verwendet, während ich hätte verwenden sollenorg.apache.log4j.Logger
. Mit diesem richtigen Logger habe ich meinen Abend gerettet.quelle
Ich hatte ein ähnliches Problem mit einer log4j.xml-Datei für einen Komponententest und habe alle oben genannten Schritte ausgeführt. Aber ich habe herausgefunden, dass ich nur einen fehlgeschlagenen Test erneut ausgeführt habe. Wenn ich die gesamte Testklasse erneut ausgeführt habe, wird die richtige Datei abgerufen. Dies ist unter Intelli-j 9.0.4
quelle