49 votes

Comment puis-je écrire un build maven pour ajouter des ressources au classpath ?

Je suis en train de construire un jar en utilisant maven avec une simple installation de maven. Si j'ajoute un fichier à src/main/resources il peut être trouvé dans le classpath mais il a un dossier de configuration où je veux que ce fichier aille mais le déplacer dans le dossier de configuration le fait disparaître du classpath.

88voto

Yanflea Points 1817

Une alternative plus propre consiste à mettre votre fichier de configuration dans un sous-dossier de src/main/ressources serait d'améliorer les emplacements de votre classpath. C'est extrêmement facile à faire avec Maven.

Par exemple, placez votre fichier de propriété dans un nouveau dossier src/main/config et ajoutez ce qui suit à votre pom :

 <build>
    <resources>
        <resource>
            <directory>src/main/config</directory>
        </resource>
    </resources>
 </build>

Désormais, tous les fichiers sous src/main/config est considéré comme faisant partie de votre classpath (notez que vous pouvez exclure certains d'entre eux du jar final si nécessaire : il suffit de l'ajouter dans la section build :

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>my-config.properties</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>

de sorte que ma-config.properties peut être trouvé dans votre classpath lorsque vous exécutez votre application depuis votre IDE, mais restera externe à votre jar dans votre distribution finale).

55voto

ŁukaszBachman Points 10541

Si vous placez quelque chose dans src/main/resources alors, par défaut, il se retrouvera dans votre répertoire final. *.jar . Si vous le référencez à partir d'un autre projet et qu'il ne peut pas être trouvé dans le classpath, alors vous avez commis l'une de ces deux erreurs :

  1. *.jar n'est pas correctement chargé (peut-être une faute de frappe dans le chemin ?)
  2. vous ne vous adressez pas correctement à la ressource, par exemple : /src/main/resources/conf/settings.properties est vu sur le classpath comme classpath:conf/settings.properties

7 votes

Le protocole URL "classpath :" est spécifique à Spring.

0 votes

Dois-je déclarer (via Spring @PropertySource par exemple) l'emplacement du fichier .properties s'il ne se trouve pas dans src/main/resources ou, disons, dans /src/main/resources/conf ? Par défaut, seuls les fichiers src/main/resources sont placés dans le classpath ou dans un sous-dossier également ? Merci

0 votes

Dois-je importer /src/main/resources/application.properties en premier lieu (@PropertySource ("application.properties") ou l'emplacement par défaut n'a pas besoin d'être importé ?

9voto

Mahendra Sri Points 78

Par défaut, maven n’inclut aucun fichier de « src/main/java ».

Vous avez deux façons possibles d’y parvenir.

  1. mettez tous vos fichiers de ressources (différents des fichiers java) dans « src / main / resources » - ceci est fortement recommandé
  2. Ajouter à votre pom (plugin de ressource):

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X