it-swarm.com.de

Hinzufügen von Ressourcen in IntelliJ für das Maven-Projekt

Ich habe eine Projektstruktur wie diese:

src
 |-main
    |-Java
       |-com.abc.xyz
          |-Login.Java

Ich muss dazu eine Ressourcendatei hinzufügen und die Ressource mit lesen 

InputStream is = getClass().getResourceAsStream("launchers.properties");

Das gibt null.

In Intellij kann ich kein neues Paket unter src/main für den resources-Ordner hinzufügen, damit die Projektstruktur so aussieht. Wie kann ich die Ressourcendatei launchers.properties in das Projekt laden?

src
 |-main
    |-Java
       |-com.abc.xyz
          |-Login.Java
    |-resources
       |-com.abc.xyz
          |-Login
             |-launcher.properties

Ich habe die von @maba vorgeschlagene Lösung ausprobiert, funktioniert aber immer noch nicht

37
vikas

Der launcher.properties sollte sich nicht in einem Ordner namens Login befinden. Es sollte direkt im Ordner src/main/resources/com/abc/xyz abgelegt werden.


Es ist wirklich so einfach wie gesagt, aber wenn der Ressourcenordner nicht als Quellordner markiert ist, kann dies das Problem sein.

Dies ist die anfängliche Klasse und Einrichtung:

enter image description here

Erstellen Sie nun den Ressourcenordner:

enter image description here

enter image description here

Dieser neu erstellte Ordner sollte automatisch als Quellordner markiert werden, und wenn er blau markiert ist, ist dies der Fall. Ansonsten müssen Sie es manuell markieren:

enter image description here

Jetzt können Sie Pakete hinzufügen:

enter image description here

enter image description here

Und jetzt können Sie die Datei hinzufügen:

enter image description here

enter image description here

Wenn Sie die Anwendung erneut ausführen, erhalten Sie keine null-Werte zurück:

enter image description here

Und in der Paketansicht wird sicher auch die launchers.properties-Datei angezeigt:

enter image description here

56
maba

Wie @maba darauf hinweist, sollte sich Ihre Eigenschaftendatei in demselben Paket befinden wie Ihre Klasse, damit Ihr Code funktioniert.

Sie sollten also zwei Dateien haben:

  • src/main/Java/com/abc/xyz/Login.Java
  • src/main/resources/de/abc/xyz/launcher.properties

Ob IntelliJ die Ressource anzeigt oder nicht, steht neben der Frage. Sie müssen überprüfen, ob die Ergebnisse in Ihrem Zielartefakt enthalten sind.

Führen Sie einen build all in IntelliJ aus, öffnen Sie das resultierende WAR/JAR/EAR mit Ihrem bevorzugten Zip-Viewer und navigieren Sie zum Ordner "com/abc/xyz". Dort sollten Sie beide Dateien sehen.

  • Wenn dies der Fall ist, tun Sie etwas falsch in Ihrem Code. Suchen Sie nach Tippfehlern, insbesondere nach Punkten und Leerzeichen am Ende oder Anfang (z. B. "launcher.properties [Leerzeichen]"), und kopieren Sie den Dateinamen, um sicherzustellen, dass dies möglich ist
  • Wenn sie nicht vorhanden sind, ist Ihr IntelliJ-Setup falsch. Ressourcen werden nicht in den Zielaufbau aufgenommen. Überprüfen Sie online für Tutorials wie Sie dies mit der IntelliJ-Idee tun.
3
boky

Nein ..... die Struktur ist falsch .... Sie sollten nicht dasselbe Paket unter resources erstellen, das hässlich und nicht richtig ist: resources ist für Ressourcen und sollte nicht enthalten Quellpakete.

Bei Verwendung der ClassLoader.getResources(asStream)(path) -Methode beginnt die Methode nur mit der Suche im Stammverzeichnis des Klassenpfads, und der Pfadname darf nicht mit / Als führenden Zeichen beginnen. Was Sie tun müssen, ist, das resources in IntelliJ als resources folder Zu markieren. Dann werden die Dateien unter resources unter classpath aufgelistet und Sie können sie ganz einfach so verwenden, wie Sie es getan haben.

(Ich sehe in früheren Antworten, dass diese Option 2013 noch nicht verfügbar ist. Sie haben nur mark as source folder, Genau wie in Eclipse, bis jetzt haben wir "Quellordner hinzufügen", aber jetzt 2018 ist sie in Intellij: you verfügbar kann einen Ordner als Quelle, Ressourcen, Testquelle und Testressourcen markieren, und alle werden zum Stammverzeichnis des Klassenpfads hinzugefügt.)

0
WesternGun

im Menü Konfiguration ausführen/bearbeitenin der Option VM sollten Sie .__ hinzufügen. -Dspring.config.location = Pfaddatei

Ich habe es in IntelliJ ausprobiert und es funktioniert!

0
Sudabe-Neirizi

Ich hatte das gleiche Problem und bemerkte, dass die Ressourcendatei, zum Beispiel: my.properties, nicht in den entsprechenden Modulordner im Verzeichnis target kopiert wird, nachdem ein Build erstellt wurde. Um das zu lösen, musste ich Maven anweisen, die Ressourcen während des Erstellungsprozesses aus dem Modulverzeichnis in das Verzeichnis target zu kopieren. In der .pom-Datei habe ich das <resource>-Element folgendermaßen hinzugefügt:

<project ...>
    ...
    <build>
        ...
        <resource>
            <directory>src/main/Java/com/abc/xyz</directory>
            <targetPath>com/abc/xyz</targetPath>
        </resource>
    </build>
    ...
</project>

Beachten Sie, dass das <directory>-Element relativ zum Speicherort der .pom-Datei ist, d. H. Dem Stammverzeichnis des Projekts, und das <targetPath>-Element gibt den durch Schrägstriche getrennten Paketnamen an.

0
vivanov