webxml-kenmerk is vereist bij Servlet 3.0

Ik krijg deze foutmelding wanneer ik een Vaadin WAR probeer te compileren:

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]

Ik weet dat deze fout betekent dat maven mijn web.xml niet kan vinden, maar in het “Book of Vaadin” staat dat web.xml niet nodig isbij gebruik van Servlet API 3.0 en de annotatie @WebServletin uw UI-klasse.

Ik ben mijn widgetsets aan het compileren in een apart profiel (volgens dezehandleiding) en het compileert prima als ik dit profiel beheer. Wanneer ik echter alleen het webproject compileer, krijg ik de bovengenoemde fout.

Wat geeft?

Overschrijf ik het maven-gedrag op de een of andere manier? Vaadin heeft niet eens een WEB-INF-directory gemaakt. Ik denk dat ik een WEB-INF-map zou kunnen maken en een “ghost” web.xml daarin zou kunnen houden om maven tevreden te houden, maar dat lijkt niet juist.

Mis ik iets?

Weet iemand hier een goede oplossing voor?


Antwoord 1, autoriteit 100%

Maven-war-plugin zal standaard mislukken als het web.xml niet kan vinden, zie hier. Als u een Maven-project maakt met het nieuwste archetype, krijgt u deze parameter ingesteld op false:

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

Als je web.xml wilt gebruiken in plaats van annotaties, maak dan gewoon WEB-INF/web.xml en definieer daar de servlet, zie Book of Vaadin voor gedetailleerde instructies.


Antwoord 2, autoriteit 3%

Ik kwam hier terecht met een soortgelijke fout, maar ik gebruikte Eclise Luna (4.4) met Maven 3.0

Ik heb dit uiteindelijk gedaan:

  1. verplaats de WebContent\WEB-INF\web.xmlnaar src\main\webapp\WEB-INF\web.xml

  2. Gebruik de <webXml>om de locatie van web.xml op te geven

<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. Voer mvn-pakketuit en zie een BUILD SUCCESS (voor WAR)

Hiervoor probeerde ik het originele pad van het web.xml-bestand

te gebruiken

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

Maar maven nam het niet op en het is het beste om de maven-mapstructuur te volgen

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


Antwoord 3

Sinds versie 3.0.0 is de maven-war-pluginwerkt direct zonder web.xml.

Tot ten minste Maven versie 3.3.9 de verpakking warbindt met een oudere versie van de maven-war-plugin, dus je moet de versie expliciet instellen in je 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>

Eerdere versies van de maven-war-pluginhadden de parameter failOnMissingWebXmlstandaard ingesteld op true, wat uw probleem veroorzaakt. Zie Sergey Makarovs antwoordvoor meer informatie over het handmatig instellen van de parameter op falseals u een oudere versie van de plug-in.


Antwoord 4

Het kan zijn dat u niet de standaard maven-mapindeling volgt zoals hier beschreven Maven-mapindeling

Other episodes