web-dev-qa-db-fra.com

Maven: Inclusion d'un dossier META-INF dans le dossier 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 Java compilées. J'utilise Maven, mais il semble que par défaut Maven n'inclura rien qui ne soit pas = Java class. Il ignore donc mon META-INF répertoire qui se trouve en haut du répertoire src. Le META-INF le répertoire contient un fichier nommé persistence.xml. Des conseils rapides sur la façon de demander à Maven de placer ce répertoire et ce fichier dans le dossier de sortie?

40
user157916

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

Pour les projets Maven WAR, c'est un peu plus compliqué: il y a aussi le src/main/webapp répertoire, dans lequel Maven s'attend à trouver WEB-INF/web.xml. Pour créer 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)

Comme le WEB-INF le répertoire doit exister sous src/main/webapp, Je vous recommande d'éviter de le redéfinir dans src/main/resources. Bien que cela soit parfaitement valide et que le contenu des deux répertoires soit fusionné, cela peut devenir déroutant si un fichier est défini dans les deux. Le contenu de src/main/resources aura priorité car ils sont copiés par-dessus le contenu de src/main/webapp.

82
Rich Seller

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

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

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

11
jt.

Mettez ceci dans 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>
4
Makub

Je répondrai indirectement à votre question en disant que si vous avez déjà fait le saut vers Maven2, je recommanderais certainement d'utiliser le plugin d'archétype. L'utilisation de l'archétype webapp vous assurera de vous retrouver avec une structure de répertoire canonique. Quiconque regarde votre source saura immédiatement où tout se trouve et il ne sera pas question de savoir où vont vos fichiers.

4
Zac

Donnez l'entrée ci-dessous 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>
0
Java Guy