web-dev-qa-db-fra.com

Pourquoi maven-war-plugin échoue-t-il pour web.xml s'il manque si je l'ai configuré pour ne pas échouer avec le fichier web.xml manquant?

Voici un défi: pourquoi cette version échoue-t-elle?

J'ai configuré le plugin maven-war-plugin de Maven pour ne pas échouer sur un fichier web.xml complet, il semble:

    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <executions>
            <execution>
                <id>prepare-war</id>
                <phase>prepare-package</phase>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <archiveClasses>false</archiveClasses>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix />
                        </manifest>
                        <manifestEntries>
                            <Implementation-Build>${build.number}</Implementation-Build>
                            <Implementation-Title>${project.name}</Implementation-Title>
                            <Built-By>${user.name}</Built-By>
                            <Built-OS>${os.name}</Built-OS>
                            <Build-Date>${build.date}</Build-Date>
                        </manifestEntries>
                    </archive>
                    <webResources>
                        <resource>
                            <!-- this is relative to the pom.xml directory -->
                            <directory>./target/dist</directory>
                        </resource>
                    </webResources>
                </configuration>
            </execution>
        </executions>
    </plugin>

Mais malgré cette configuration, il continue à échouer de la manière suivante:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

En fait, je n'ai pas le fichier web.xml, donc j'en ai besoin pour organiser la guerre sans ce dernier.

J'ai essayé d'ajouter un <webXml>none</webXml> faux dans la configuration, mais cela n'a rien changé ...

Qu'est-ce que je rate?

9
Edy Bourne

L'ID d'exécution dans le POM est prepare-war. Maven exécute sa propre exécution par défaut du plug-in war pour les projets de type d'emballage war. L'exécution par défaut a l'ID default-war. Comme le POM est actuellement configuré, l’objectif war est exécuté deux fois.

Si vous regardez le message d'erreur:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

Vous pouvez voir l'ID d'exécution qui échoue entre parenthèses (default-war). Si vous modifiez l'ID d'exécution en default-war, votre problème disparaîtra ET vous n'aurez plus deux exécutions de l'objectif de guerre en cours d'exécution.

6
user944849

Cela devrait fonctionner:

<plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
            <executions>
                <execution>
                    <id>prepare-war</id>
                    <phase>prepare-package</phase>
                    <configuration>
                        <archiveClasses>false</archiveClasses>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix />
                            </manifest>
                            <manifestEntries>
                                <Implementation-Build>${build.number}</Implementation-Build>
                                <Implementation-Title>${project.name}</Implementation-Title>
                                <Built-By>${user.name}</Built-By>
                                <Built-OS>${os.name}</Built-OS>
                                <Build-Date>${build.date}</Build-Date>
                            </manifestEntries>
                        </archive>
                        <webResources>
                            <resource>
                                <!-- this is relative to the pom.xml directory -->
                                <directory>./target/dist</directory>
                            </resource>
                        </webResources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Veuillez noter que la section <failOnMissingWebXml>false</failOnMissingWebXml> a été déplacée vers la configuration du plugin plutôt que vers l'exécution.

10
Jorge_B

Le problème est lié à la version que vous utilisez actuellement. Vous devez voir votre référentiel local et voir la version que vous avez déjà téléchargée. Allez dans votre dossier .m2 et cherchez 

.m2\repository\org\Apache\maven\plugins\maven-compiler-plugin

Dans ce dossier, vous pouvez voir les versions disponibles.

Changez la version de la version que vous avez dans votre dossier et ça marche!

0
Pablo Guzman Labra