[JAVA] Verwendung von Maven zum Platzieren von Ressourcendateien außerhalb von JAR

Das zu lösende Problem ist, wie der Titel sagt. In einem normalen Java-Programm werden Ressourcendateien unter src / main / resources abgelegt, und diese Ressourcendateien werden zur Erstellungszeit in JAR aufgenommen. Es gibt jedoch Fälle, in denen Sie diese Ressourcendateien in einem externen Ordner anstatt in der JAR ablegen möchten. Wenn Sie beispielsweise die Eigenschaftendatei außerhalb der JAR platzieren, können Sie das Verhalten des Programms ändern, ohne es zu erstellen, selbst wenn umgebungsabhängige Einstellungen wie DB-Verbindungsinformationen geändert werden. Dieser Artikel beschreibt, wie Sie Maven verwenden, um einen solchen Build zu erzielen.

Geben Sie einen externen Ressourcenordner an

Sie können das maven-jar-Plugin verwenden, um Ressourcen extern zu platzieren, indem Sie einen externen Ordner über den Klassenpfad anstelle von src / main / resources übergeben. Im Folgenden finden Sie ein Beispiel zum Festlegen des Einstellungsordners im selben Pfad wie die JAR-Datei, indem Sie einen relativen Pfad angeben.

Nehmen Sie als Voraussetzung an, dass die Struktur des Installationsordners der JAR-Datei wie folgt lautet.

Struktur des Installationsordners


install_dir
 L MY_JAR_FILE.jar
 L settings
   L my_resource.properties

Schreiben Sie Folgendes in pom.xml.

pom.xml


<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.gmail.greencoffeemaker.MainApp</mainClass>
            <addClasspath>true</addClasspath>
          </manifest>
          <manifestEntries>
            <!--Wenn Sie einen Ordner angeben, am Ende des Pfads/Vergiss nicht anzuziehen-->
            <Class-Path>./settings/</Class-Path>
          </manifestEntries>
        </archive>
      </configuration>
    </plugin>
  </plugin>
</build>

In Java-Programmen können Sie die ResoruceBundle-Klasse verwenden, um Ressourcen zu verarbeiten, ohne den Pfad zu kennen.

Beispiel für die Ressourcenbeschaffung


ResourceBundle res = ResourceBundle.getBundle("my_resource");
String val = res.getString("mykey");

Erleichtern Sie das Debuggen

Wenn Sie den Ressourcenordner extern mit der oben beschriebenen Methode angeben, müssen Sie den externen Ordner in der Ausführungskonfiguration festlegen, wenn Sie das Debuggen mit Eclipse ausführen, was problematisch ist. Um dies zu vermeiden, platzieren Sie die Ressourcendatei gemäß der Java-Methode unter src / main / resources und ändern Sie die Build-Konfiguration so, dass die Ressourcendatei zur Build-Zeit unter target ausgegeben wird. Dadurch entfällt der Aufwand beim Ausführen eines Debugs. (Verwenden Sie die Ressourcendatei unter Ziel für die Bereitstellung.)

Geben Sie die Ressourcendatei aus, indem Sie den Befehl ant mit dem maven-antrun-plugin ausführen. Es müssen zwei Befehle ausgeführt werden: "Ausgabeverzeichnis erstellen" und "Ressourcendatei kopieren".

Nehmen Sie als Voraussetzung an, dass die Projektstruktur wie folgt ist:

Projektstruktur


my-project
 L src/main/java
 L src/main/resource
    L my_resource.properties
 L target

Schreiben Sie Folgendes in pom.xml.

pom.xml


<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <!--Unterlassung-->
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <executions>
        <execution>
          <phase>package</phase>
          <configuration>
            <target>
              <!--Kopieren: /src/main/resources => /target/settings -->
              <mkdir dir="${project.build.directory}/settings" />
              <copy todir="${project.build.directory}/settings">
                <fileset dir="${project.basedir}/src/main/resources" />
              </copy>
            </target>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugin>
</build>

Beim Erstellen mit Maven wird eine JAR-Datei unter dem Ziel erstellt, gleichzeitig ein Einstellungsordner erstellt und Ressourcendateien kopiert.

Befehl erstellen


$> mvn clean package

Projektkonfiguration (nach dem Build)


my-project
 L src/main/java
 L src/main/resource
    L my_resource.properties
 L target
    L MY_JAR_FILE.jar
    L settings
        L my_resource.properties

das ist alles.

Recommended Posts

Verwendung von Maven zum Platzieren von Ressourcendateien außerhalb von JAR
Verwendung der link_to-Methode
Verwendung der include? -Methode
Verwendung der Methode form_with
Verwendung der Wrapper-Klasse
So fügen Sie ein lokales Glas zu mavens pom.xml hinzu
Verwendung von binding.pry für die Ansichtsdatei
[Java] Verwendung der File-Klasse
[Schienen] Verwendung der Kartenmethode
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Verarbeitung × Java] Verwendung der Klasse
[Verarbeitung × Java] Verwendung der Funktion
[Java] Verwendung der Calendar-Klasse
So platzieren Sie Geckodriver (Seleniums WebDriver) mit dem Befehl Maven auf dem Pfad
Verwendung des Kameramoduls OV7725 (ESP32-WROVER-B)
Wenn Sie die Methode außerhalb verwenden möchten
Ausgabe der Verwendung der Slice-Methode
Verwendung der replace () -Methode (Java Silver)
So löschen Sie eine Ressourcendatei mit Spring-Boot
So erstellen Sie ein ausführbares JAR in Maven
[Ruby-Grundlagen] Verwendung der Slice-Methode
So spielen Sie eine MIDI-Datei mit der Java Sound API ab (geben Sie das zu verwendende MIDI-Gerät an)
Datei zur JAR-Datei hinzufügen
Einführung in JAR-Dateien
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Wie man Maven benutzt, das ich nicht mehr hören kann
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
[Anfänger] Entdecken Sie das N + 1-Problem! Wie benutzt man Bullet?
So geben Sie den Ressourcenpfad beim HTML-Import an
So debuggen Sie die generierte JAR-Datei mit Eclipse
Verwendung der Getter / Setter-Methode (in Objektorientierung)