Le problème à résoudre est comme l'indique le titre. Dans un programme Java normal, les fichiers de ressources sont placés sous src / main / resources, et ces fichiers de ressources sont inclus dans le JAR au moment de la construction. Cependant, dans certains cas, vous souhaitez placer ces fichiers de ressources dans un dossier externe plutôt que dans le JAR. Par exemple, en plaçant le fichier de propriétés en dehors du JAR, vous pouvez modifier le comportement du programme sans effectuer de création même si les paramètres dépendant de l'environnement, tels que les informations de connexion à la base de données, sont modifiés. Cet article décrit comment utiliser Maven pour réaliser une telle version.
Vous pouvez utiliser maven-jar-plugin pour placer des ressources en externe en passant un dossier externe via le chemin de classe au lieu de src / main / resources. Voici un exemple pour définir le dossier de paramètres dans le même chemin que le fichier JAR en spécifiant un chemin relatif.
Comme condition préalable, supposons que la structure du dossier d'installation du fichier JAR est la suivante.
Structure du dossier d'installation
install_dir
L MY_JAR_FILE.jar
L settings
L my_resource.properties
Écrivez ce qui suit dans 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>
<!--Si vous spécifiez un dossier, à la fin du chemin/N'oubliez pas de mettre-->
<Class-Path>./settings/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugin>
</build>
À partir des programmes Java, vous pouvez utiliser la classe ResoruceBundle pour gérer les ressources sans être particulièrement conscient du chemin.
Échantillon d'acquisition de ressources
ResourceBundle res = ResourceBundle.getBundle("my_resource");
String val = res.getString("mykey");
Si vous spécifiez le dossier de ressources en externe par la méthode ci-dessus, vous devez définir le dossier externe dans la configuration d'exécution lors de l'exécution du débogage avec Eclipse, ce qui est gênant. Pour éviter cela, placez le fichier de ressources sous src / main / resources selon la méthode de Java, et modifiez la configuration de construction afin que le fichier de ressources soit sorti sous la cible au moment de la construction. Cela éliminera les tracas liés à l'exécution d'un débogage. (Utilisez le fichier de ressources sous la cible pour le déploiement)
Sortez le fichier de ressources en exécutant la commande ant à l'aide de maven-antrun-plugin. Il y a deux commandes à exécuter: "Créer un répertoire de sortie" et "Copier le fichier de ressources".
Comme condition préalable, supposons que la structure du projet est la suivante:
Structure du projet
my-project
L src/main/java
L src/main/resource
L my_resource.properties
L target
Écrivez ce qui suit dans pom.xml.
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<!--Omission-->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<!--copie: /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>
Lors de la construction avec Maven, un fichier JAR est créé sous la cible, un dossier de paramètres est créé en même temps et les fichiers de ressources sont copiés.
Commande de construction
$> mvn clean package
Configuration du projet (après la construction)
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
c'est tout.
Recommended Posts