40 votes

Maven : inclusion d'un dossier META-INF dans le dossier des classes

J'ai un projet WAR très simple et je veux inclure un répertoire nommé META-INF en haut du dossier de sortie des classes où se trouvent toutes les classes Java compilées. J'utilise Maven, mais il semble que, par défaut, Maven n'inclut rien qui ne soit pas une classe Java. Il ignore donc mon META-INF qui se trouve en haut de l'arborescence src répertoire. Le site META-INF Le répertoire contient un fichier nommé persistence.xml . Avez-vous des indications rapides sur la manière de demander à Maven de placer ce répertoire et ce fichier dans le dossier de sortie ?

82voto

Rich Seller Points 46052

En général, pour un projet Maven basé sur Java, les fichiers non sources doivent être placés dans le répertoire src/main/resources dans le sous-répertoire du projet. Le contenu de ce resources sont copiés dans le répertoire de sortie (par défaut, target/classes ) pendant le processus-ressources phase de la construction.

Pour les projets Maven WAR, c'est un peu plus compliqué : il y a aussi la fonction src/main/webapp dans lequel Maven s'attend à trouver WEB-INF/web.xml . Pour construire votre fichier WAR, ce fichier doit exister ; sinon, vous verrez un message d'erreur comme celui-ci :

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

Como el WEB-INF doit exister sous src/main/webapp je recommanderais d'éviter de le définir à nouveau dans la section src/main/resources . Bien que cela soit parfaitement valable et que le contenu des deux répertoires soit fusionné, cela peut prêter à confusion si un fichier est défini dans les deux. Le contenu de src/main/resources seront prioritaires car ils seront copiés par-dessus le contenu de l'élément src/main/webapp .

11voto

jt. Points 3116

Maven veut ce type d'information dans le dossier des ressources. Voir aquí pour plus d'informations.

Project
|-- pom.xml
`-- src
    `-- main
        |-- java
        `-- resources

Pour spécifier des répertoires de ressources supplémentaires, voir aquí .

4voto

Makub Points 41

Mets ça dans le fichier pom.xml :

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>

4voto

Zac Points 707

Je vais répondre indirectement à votre question en disant que si vous avez déjà fait le saut vers Maven2, je vous recommande vivement d'utiliser le plugin Archetype. L'utilisation de l'archétype webapp vous permettra d'obtenir une structure de répertoire canonique. Toute autre personne qui consulte vos sources saura immédiatement où se trouve chaque élément et il n'y aura aucun doute quant à l'emplacement de vos fichiers.

0voto

Java Guy Points 947

Donnez l'entrée suivante dans POM.xml

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                  <!--webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory-->
                  <packagingExcludes>**/web.xml</packagingExcludes>
                </configuration>
            </plugin>

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