атрибут webxml требуется с сервлетом 3.0
Я получаю эту ошибку при попытке скомпилировать войну 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]
Я знаю, что эта ошибка означает, что maven не может найти мою сеть.XML, но в Книгу "фреймворк Vaadin" он говорит, что web.xml не требуется при использовании Servlet API 3.0 и аннотации @WebServlet
в вашем классе пользовательского интерфейса.
я компилирую свои widgetsets в отдельном профиле (согласно этой guide), и он отлично компилируется, когда я rnu этот профиль. Однако, когда я компилирую только веб-проект, я получаю вышеупомянутую ошибку.
что это дает?
Я как-то переопределяю поведение maven? Ваадин даже не создал каталог WEB-INF. Думаю, я мог бы создать папку WEB-INF и сохранить "призрачную" сеть.xml там, чтобы Maven был счастлив, но это не кажется правильным.
Я что-то пропустила?
кто-нибудь знает хорошее решение для этого?
4 ответов
по умолчанию Maven-war-plugin не сможет найти web.xml, см. здесь. Если вы создаете проект Maven с использованием последнего архетипа, вы получите этот параметр равным false:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
Если вы хотите использовать web.xml вместо аннотаций просто создайте WEB-INF/web.xml и определите сервлет там, см. книгу Vaadin для подробной инструкции.
Я приземлился здесь с аналогичной ошибкой, но используя Eclise Luna (4.4) с Maven 3.0
Я закончил тем, что сделал это:
перемещение WebContent\WEB-INF\web.в XML to в src\главная\Арр\веб-веб-инф\.в XML
использовать
<webXml>
для указания местоположения 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>
- Run mvn пакет и увидеть успех сборки (для Война)
до этого я пытался использовать исходный путь web.в XML
<webXml>WebContent\WEB-INF\web.xml</webXml>
но maven не pickit и лучше всего следовать структуре папок maven
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
начиная с версии 3.0.0 на maven-war-plugin
работает из коробки без web.xml
.
до по крайней мере Maven версии 3.3.9 упаковка war
привязывается к более старой версии maven-war-plugin
, поэтому вам нужно явно установить версию в вашем 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>
более ранние версии maven-war-plugin
у параметр failOnMissingWebXml
значение true
по умолчанию, что вызывает вашу проблему. См.Сергей Макаров ответ о том, как вручную установить параметр false
если вам нужно использовать старую версию плагина.
может быть, вы не следуете стандартному макету каталога maven, как описано здесь макет каталога Maven