[JAVA] Comment utiliser Maven pour placer des fichiers de ressources en dehors de JAR

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.

Spécifiez un dossier de ressources externe

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

Facilitez le débogage

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

Comment utiliser Maven pour placer des fichiers de ressources en dehors de JAR
Comment utiliser la méthode link_to
Comment utiliser la méthode include?
Comment utiliser la méthode form_with
Comment utiliser la classe wrapper
Comment ajouter un pot local au pom.xml de Maven
Comment utiliser binding.pry pour afficher le fichier
[Java] Comment utiliser la classe File
[Rails] Comment utiliser la méthode de la carte
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Traitement × Java] Comment utiliser la classe
[Traitement × Java] Comment utiliser la fonction
[Java] Comment utiliser la classe Calendar
Comment placer geckodriver (WebDriver de Selenium) sur le chemin à l'aide de la commande Maven
Comment utiliser le module caméra OV7725 (ESP32-WROVER-B)
Lorsque vous souhaitez utiliser la méthode à l'extérieur
Sortie de la façon d'utiliser la méthode slice
Comment utiliser la méthode replace () (Java Silver)
Comment sortir un fichier de ressources avec spring-boot
Comment créer un fichier exécutable dans Maven
[Introduction à Ruby] Comment utiliser la méthode slice
Comment lire un fichier MIDI à l'aide de l'API Java Sound (spécifiez le périphérique MIDI à utiliser)
Ajouter un fichier au fichier jar
Introduction aux fichiers JAR
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
[Comment utiliser l'étiquette]
Comment utiliser l'identité
Comment utiliser le hachage
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser Map
Comment utiliser Maven que je n'entends plus
[Rails] Je ne sais pas comment utiliser le modèle ...
[Débutant] Découvrez le problème N + 1! Comment utiliser Bullet
Comment spécifier le chemin de la ressource dans l'importation HTML
Comment déboguer le fichier jar généré avec Eclipse
Comment utiliser la méthode getter / setter (en orientation objet)