webentwicklung-frage-antwort-db.com.de

Fügen Sie dem Klassenpfad von IntelliJ eine Eigenschaftendatei hinzu

Ich führe ein einfaches Java vom IntelliJ IDE über das Menü Run-> Run aus. Es funktioniert einwandfrei. Jetzt möchte ich die log4j-Protokollierung 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.

Was ist die richtige Methode, um IntelliJ anzuweisen, den Ressourcenordner in den Klassenpfad aufzunehmen, damit die Eigenschaftendatei angezeigt wird?

Mit IntelliJ 8 konnte 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"?/Rauch/Entlüftung/Beschwörung

115
Tony Ennis

Versuche dies:

  • Gehen Sie zu Projektstruktur.
  • Wählen Sie Ihr Modul.
  • Suchen Sie den Ordner im Baum rechts und wählen Sie ihn aus.
  • Klicken Sie auf die Schaltfläche Quellen über dieser Struktur (mit dem blauen Ordner), um diesen Ordner zu einem Quellenordner zu machen.
83
ColinD

Tatsächlich haben Sie mindestens zwei Möglichkeiten, dies zu tun. Die erste Möglichkeit wird von ColinD beschrieben. Sie konfigurieren lediglich den Ordner "resources" als Sources-Ordner in IDEA. Wenn Resource Patterns die Erweiterung Ihrer Ressource enthält, wird diese in das Ausgabeverzeichnis kopiert, wenn Make das Projekt- und Ausgabeverzeichnis automatisch ein Klassenpfad Ihrer Anwendung ist.

Eine andere gebräuchliche Methode ist das direkte Hinzufügen des Ordners "resources" zum Klassenpfad. Gehen Sie zu Projektstruktur | Module | Ihr Modul | Abhängigkeiten, klicken Sie auf Hinzufügen, Modulbibliothek mit einem Eintrag und geben Sie den Pfad zu den "Ressourcen" an. Mappe.

Eine weitere Lösung wäre, die Datei log4j.properties direkt unter dem Quellstamm Ihres Projekts (im Standardpaketverzeichnis) abzulegen. Dies ist der gleiche Weg wie der erste, außer dass Sie keinen weiteren Quellstamm in den Einstellungen für Module Paths hinzufügen müssen. Die Datei wird beim Erstellen in das Ausgabeverzeichnis kopiert.

Wenn Sie mit verschiedenen log4j-Konfigurationen testen möchten, ist es möglicherweise einfacher, eine benutzerdefinierte Konfigurationsdatei direkt in der Datei Run/Debug configuration, VM parameters anzugeben.

-Dlog4j.configuration=file:/c:/log4j.properties.

47
CrazyCoder

Ich habe das gleiche Problem und es nervt mich enorm !!

Ich habe immer gedacht, ich sollte als Antwort 2 dienen. Früher funktionierte das in Intellij 9 (jetzt mit 10).

Allerdings habe ich herausgefunden, dass das Hinzufügen dieser Zeile zu meiner maven pom-Datei hilft:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>
39
Peter Thygesen

Ich habe ziemlich viel Zeit damit verbracht, herauszufinden, wie das in Intellij 13x funktioniert. 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.

  • Gehen Sie zu Ihrem Projekt-Setup (STRG + ALT + UMSCHALT + S)
  • Wählen Sie in der Liste das Modul aus, zu dem Sie eine oder mehrere Eigenschaftendateien hinzufügen möchten.
  • Wählen Sie rechts die Registerkarte Abhängigkeiten.
  • Klicken Sie auf das grüne Pluszeichen und wählen Sie "Gläser oder Verzeichnisse".
  • Wählen Sie nun den Ordner aus, der die Eigenschaftendatei (en) enthält. (Ich habe nicht versucht, eine einzelne Datei einzuschließen.)
  • Intellij fragt Sie nun nach der "Kategorie" der ausgewählten Datei. Wählen Sie "Klassen" (auch wenn dies nicht der Fall ist).
  • Jetzt müssen Sie die Eigenschaftendateien zum Artefakt hinzufügen. Intellij gibt Ihnen die unten gezeigte Verknüpfung. Es werden Fehler im roten Teil unten und eine 'rote Glühbirne' angezeigt, die beim Klicken eine Option zum Hinzufügen der Dateien zum Artefakt anzeigt. Sie können auch zum Abschnitt "Artefakte" gehen und die Dateien manuell zu den Artefakten hinzufügen.

enter image description here

16
Julius

Es stellte sich einer ähnlichen Herausforderung, Dateien mit der Erweiterung .ini zum Klassenpfad hinzuzufügen. Gefundene diese Antwort , um sie zu Einstellungen -> Compiler -> Ressourcenmuster -> [...]; *. Ini hinzuzufügen

13
prototype

Wenn Sie jemals das gleiche Problem mit Scala und SBT haben:

  • Gehen Sie zu Projektstruktur. Die Verknüpfung ist (STRG + ALT + UMSCHALT + S)

  • Wählen Sie in der Liste ganz links Projekteinstellungen> Module aus

  • Wählen Sie in der Modulliste rechts davon das Modul Ihres Projektnamens (ohne Build) und wählen Sie die Registerkarte "Quellen"

  • Erweitern Sie in der Mitte den Ordner, der das Stammverzeichnis Ihres Projekts für mich ist, /home/<username>/IdeaProjects/<projectName>

  • Sehen Sie sich den Abschnitt Inhaltsstamm 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 und setze log4j.properties ein. Ich glaube, Sie können das Inhaltsstammverzeichnis auch so ändern, dass es an einer beliebigen Stelle abgelegt wird (das habe ich nicht getan).

  • Ich habe meinen Code mit einer SBT-Konfiguration ausgeführt und meine Datei log4j.properties gefunden.

enter image description here

4
user2361174

Für diejenigen von Ihnen, die von Eclipse zu IntelliJ oder umgekehrt migrieren, 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 arbeiten sehr unterschiedlich, wenn es darum geht, nach Ressourcen-/Eigenschaftendateien zu suchen, wenn Sie lokal von Ihrem IDE oder während des Debuggens ausführen möchten. (Das Packen in eine .jar-Datei ist auch ganz anders, aber das ist besser dokumentiert.)

Angenommen, Sie haben eine relative Pfadreferenz wie diese in Ihrem Code:

new FileInputStream("xxxx.properties");

(Dies ist praktisch, wenn Sie mit ENV-spezifischen .properties-Dateien arbeiten, die Sie nicht zusammen mit Ihrer JAR-Datei 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 Projekt-ROOT befinden, damit sie zur Laufzeit in IntelliJ wie folgt abgerufen werden kann. (Im Projekt-ROOT befindet sich der Ordner/src.)

Finsternis

Eclipse freut sich nur, wenn sich die Datei xxxx.properties im Projekt ROOT selbst befindet.

IntelliJ erwartet daher, dass die .properties-Datei eine Ebene höher ist als die von Eclipse, wenn auf diese Datei 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 Ihrem JAR-Code packen möchten, müssen Sie den JAR-Code wie folgt ausführen, um die .properties-Datei über die Befehlszeile korrekt zu referenzieren:

INTELLIJ EXPORTIERTES GLAS

Java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

Eclipse EXPORTED JAR

Java -jar some.jar

in diesem Fall erwartet die von Eclipse exportierte ausführbare JAR-Datei lediglich, dass sich die referenzierte .properties-Datei am selben Speicherort befindet wie die JAR-Datei

2
DataHacker

Vielleicht ist dies ein wenig unangebracht, da die Frage bereits beantwortet wurde, aber ich habe ein ähnliches Problem festgestellt. In meinem Fall wurden nur einige der Unit-Test-Ressourcen beim Kompilieren in den Ausgabeordner kopiert. Mein 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 "Resource Rescan" auslöste.

1
user1426162

Ich hatte ein ähnliches Problem mit einer log4j.xml-Datei für einen Komponententest. Es hat sich aber herausgestellt, 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

0
James B

Ich weiß, dass ich eine blöde Person bin. Nach einem langen anstrengenden Tag habe ich viel Zeit damit verbracht, dieses Problem zu beheben und alle oben genannten Antworten auszuprobieren, aber am Ende war es einer meiner vielen dümmsten Fehler.

Ich habe org.Apache.logging.log4j.Logger (: Fml :) verwendet, während ich org.Apache.log4j.Logger Hätte verwenden sollen. Die Verwendung dieses korrekten Loggers hat mir das Leben gerettet.

0
avp