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.
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");
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