Je reçois cette erreur en essayant de compiler un WAR Vaadin:
Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project testvaadin-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
Je sais que cette erreur signifie que maven ne peut pas trouver mon web.xml, mais dans le "Livre de Vaadin", il est indiqué que web.xml n'est pas nécessaire lors de l'utilisation de Servlet API 3.0 et de l'annotation @WebServlet
dans votre classe d'interface utilisateur.
Je suis en train de compiler mes widgets dans un profil séparé (selon this guide) et la compilation est correcte lorsque je suis ce profil. Cependant, lorsque je ne compile que le projet Web, j'obtiens l'erreur mentionnée ci-dessus.
Ce qui donne?
Est-ce que je remplace le comportement maven d'une manière ou d'une autre? Vaadin n'a même pas créé de répertoire WEB-INF. Je suppose que je pourrais créer un dossier WEB-INF tout en conservant un "fantôme" web.xml afin que Maven reste heureux, mais cela ne semble pas bien.
Est-ce que je manque quelque chose?
Est-ce que quelqu'un connaît une bonne solution à cela?
Par défaut, maven-war-plugin échouera s’il ne trouve pas le fichier web.xml, voir ici . Si vous créez un projet Maven en utilisant le dernier archétype, vous définissez ce paramètre sur false:
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
Si vous souhaitez utiliser web.xml à la place des annotations, créez simplement WEB-INF/web.xml et définissez le servlet à cet emplacement. Voir Book of Vaadin pour des instructions détaillées.
J'ai atterri ici avec une erreur similaire mais en utilisant Eclise Luna (4.4) avec Maven 3.0
J'ai fini par faire ceci:
déplacez WebContent\WEB-INF\web.xml vers src\main\webapp\WEB-INF\web.xml
Utilisez le <webXml>
pour spécifier l'emplacement de web.xml
<build> <plugins> <plugin> <groupId>org.Apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <webXml>src\main\webapp\WEB-INF\web.xml</webXml> </configuration> </plugin> </plugins> <!-- we dont want the version to be part of the generated war file name --> <finalName>${project.artifactId}</finalName> </build>
Avant cela, j'avais essayé d'utiliser le chemin d'origine du fichier web.xml
<webXml>WebContent\WEB-INF\web.xml</webXml>
Mais Maven n’a pas repris le flambeau et il est préférable de suivre la structure du dossier Maven.
http://maven.Apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
Depuis la version 3.0.0, le maven-war-plugin
fonctionne sans web.xml
.
Jusqu'à au moins la version 3.3.9 de Maven, le package war
est lié à une version antérieure du maven-war-plugin
, vous devez donc définir explicitement la version dans votre pom.xml
:
<project>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
Dans les versions précédentes du maven-war-plugin
, le paramètre failOnMissingWebXml
était défini sur true
par défaut, ce qui provoquait votre problème. Voir Sergey Makarovs answer sur la manière de définir manuellement le paramètre sur false
si vous devez utiliser une version plus ancienne du plugin.
Il se peut que vous ne suiviez pas la disposition de répertoire maven standard décrite ici - Disposition de répertoire Maven