Question

Je construis un outil de ligne de commande qui s'appuie sur certains fichiers de configuration.

Lors du développement, j'ai placé ces fichiers sous src/main/resources, et accessible par getClass().getResourceAsStream("/config-file-name"), ce qui fonctionne bien.

J'ai choisi maven-assembly-plugin pour construire le pot avec toutes les dépendances.

    <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.myproject.Scheduler</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
               <execution>
                   <id>make-my-jar-with-dependencies</id>
                   <phase>package</phase>
                   <goals>
                       <goal>single</goal>
                   </goals>
               </execution>
            </executions>
    </plugin>       

Les fichiers de configuration sont tous enveloppés dans un fichier jar, mais je souhaite les séparer.

Donc, j'ajoute la configuration suivante,

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>conf.properties</include>
            </includes>
            <filtering>true</filtering>
            <excludes>
                <exclude></exclude>
            </excludes>
        <targetPath>..</targetPath>             
        </resource>
    </resources>

Une fois cela fait, les fichiers de configuration sont à côté du pot au lieu d'être enveloppés dans le pot.

Mais mon code ne peut pas accéder aux fichiers pour le moment.

Dois-je changer ma façon d’accéder aux fichiers dans le code ?

Ou devrais-je ne pas mettre ces fichiers dans src/main/resources/, une alternative ?

Si quelqu'un le sait, aidez-le.

Merci.


Mise à jour:Enfin, j'abandonne l'utilisation du fichier de ressources maven, à la place, je définis le chemin du fichier sur le même chemin que jar par défaut, tout fonctionne bien sauf qu'Eclipse se plaint.

Puisque je veux déplacer le fichier de configuration hors de jar et que je ne veux pas qu'il soit dans le dossier target/classes, j'utilise donc <targetPath>..</targetPath> pour déplacer le fichier de configuration vers le même répertoire que le fichier jar.

Lorsque je génère à nouveau les paramètres du projet Eclipse, Eclipse dit :Impossible d'imbriquer le dossier de sortie « project/target/test-classes » dans le dossier de sortie « project/target ».

Quelqu'un m'aide ?

Était-ce utile?

La solution 3

J'abandonne enfin à l'aide du fichier de ressources Maven, définissez le chemin de fichier sur le même chemin que le jar par défaut, tout fonctionne bien sauf Eclipse se plaint.

(puisque je souhaite déplacer le fichier de configuration du pot, et je ne veux pas qu'il soit dans le dossier cible / classes, alors j'utilise .. Pour déplacer le fichier de configuration dans le même répertoire que le fichier JAR. Quand jeRééditer les paramètres de projet Eclipse, Eclipse dit: Impossible de nier le dossier de sortie "Projet / Cible / Classes de test" Dossier de sortie "Projet / cible".)

Je n'ai pas trouvé de solution jusqu'à présent, semble un bug eclipse.

Maintenant, j'abandonne Eclipse et j'ai changé en Idée Intellij, c'est une très belle IDE, surtout parfaitement intégrée à Maven.Je vais éviter toute chance d'utiliser Eclipse pour tout projet Maven.

Autres conseils

Votre application ne peut pas accéder aux fichiers de configuration car il n'est plus dans sa classe de classe.

Si vous souhaitez séparer vos fichiers de configuration du reste de l'application, vous voudrez peut-être relier votre Format d'assemblage .Vous voudrez peut-être utiliser BUC au lieu de jar-avec dépendances, bien qu'il s'agisse de défis sur la distribution et l'utilisation.

Selon la complication du fichier de propriétés, vous pouvez utiliser la capacité du filtre de plug-in de ressources pour modifier la valeur en fonction des profils Maven.Par exemple, si vous souhaitez avoir une propriété nommée emplacement, vous pouvez définir un profil de développement et de production, puis définissez la valeur sur une propriété Maven dans le POM (ou des profils.xml si vous êtes sur Maven 2):

<properties>
  <my.location>the_real_value</my.location>
</properties>

Puis dans le fichier de propriété que vous feriez ceci:

location=${my.location}

Assurez-vous simplement de définir le filtrage sur votre POM, comme si:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

Lorsque vous construisez, si vous regardez dans le répertoire cible et affiche ce fichier de propriétés, vous devez voir la valeur correcte substituée dans.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top