maven maven-plugin vaadin vaadin7

maven - atributo webxml es necesario con Servlet 3.0



maven-plugin vaadin (4)

Aterricé aquí con un error similar pero usando Eclise Luna (4.4) con Maven 3.0

Terminé haciendo esto:

  1. mueva WebContent / WEB-INF / web.xml a src / main / webapp / WEB-INF / web.xml

  2. Use <webXml> para especificar la ubicación 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>

  1. Ejecute el paquete mvn y vea un BUILD SUCCESS (para WAR)

Antes de esto intenté usar la ruta original del archivo web.xml

<webXml>WebContent/WEB-INF/web.xml</webXml>

Pero maven no se dio cuenta y es mejor seguir la estructura de carpetas maven

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

Me aparece este error al intentar compilar una Vaadin WAR:

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]

Sé que este error significa que maven no puede encontrar mi web.xml, pero en el "Libro de Vaadin" dice que web.xml no es necesario cuando se usa Servlet API 3.0 y Annotation @WebServlet en su clase de IU.

Estoy compilando mis widgetsets en un perfil separado (de acuerdo con this guía) y compila bien cuando uso este perfil. Sin embargo, cuando compilo solo el proyecto web, obtengo el error mencionado anteriormente.

¿Lo que da?

¿Debo anular el comportamiento maven de alguna manera? Vaadin ni siquiera creó un directorio WEB-INF. Creo que podría crear una carpeta WEB-INF y mantener un web.xml "fantasma" allí para mantener feliz a Maven, pero eso no parece correcto.

¿Me estoy perdiendo de algo?

¿Alguien sabe una buena solución para esto?


Desde la versión 3.0.0, maven-war-plugin funciona de forma web.xml sin web.xml .

Hasta al menos la versión 3.3.9 de Maven, la war empaquetado se une a una versión anterior del maven-war-plugin , por lo que debes establecer explícitamente la versión en tu 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>

Las versiones anteriores de maven-war-plugin tenían el parámetro failOnMissingWebXml establecido en true de manera predeterminada, lo que causa su problema. Consulte la respuesta de Sergey Makarovs sobre cómo configurar manualmente el parámetro en false si necesita usar una versión anterior del complemento.



Por defecto maven-war-plugin fallará si no puede encontrar web.xml, mira here . Si está creando un proyecto Maven utilizando el último arquetipo, obtendrá este parámetro establecido en falso:

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

Si desea usar web.xml en lugar de anotaciones, simplemente cree WEB-INF / web.xml y defina el servlet allí, consulte el Libro de Vaadin para obtener instrucciones detalladas.