2010-06-28 16 views
9

Podczas wykonywania mvn install, otrzymuję następujący błąd:Maven błąd podczas budowania pakietu WAR (? Web.xml brakuje ..)

Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

Moje drzewo struktura aplikacji internetowych jest tak:

my-app 
|-- pom.xml 
|-- src 
    |-- ... 
    |-- WebContent 
     |-- ... 
     |-- META-INF 
     |-- WEB-INF 
      |-- classes 
       |-- ... 
      |-- lib 
      |-- **web.xml** 

Mój plik POM wygląda tak:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>masters.traffic</groupId> 
    <artifactId>traffic_web</artifactId> 
    <packaging>war</packaging> 
    <name>traffic_web</name> 
    <version>0.1.0</version> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target>      
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    ... 
</project> 

Jak prawidłowo rozwiązać ten problem?

Pozdrowienia

Odpowiedz

19

I silnie poleca używać Maven's standard layout:

  • umieść źródła Java w wersji src/main/java (i usuń element sourceDirectory), aby umieścić źródła aplikacji WWW w src/main/webapp
  • usunąć classes i lib katalogów pod WEB-INF

Oczywiście, można dostosować układ ale to IMO więcej kłopotów i niepotrzebnych wysiłków niż korzyści. Po prostu postępuj zgodnie z konwencjami.

+0

Dzięki! Spędziłem dużo czasu, zastanawiając się, dlaczego JSF nie renderował, a ja miałem WEB-INF w innym katalogu, a potem, bawiąc się plikiem .iml IDEA, działałem, dodając deskryptor wdrożenia dla web.xml. , co jest dziwne, że to przestało działać ... Myślę, że teraz zadziała na dobre;) –

13

Domyślam się, że maven-war-plugin szuka src/main/webapp/WEB-INF/web.xml, ale nie może go znaleźć i chce, abyś wyraźnie określił (nie maven-standard) lokalizację. Jeśli nie można zmienić nazwy WebContent do webapp i przenieść je na src/main/ (zalecane), można spróbować dodać coś takiego do <build>

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
    <webXml>${basedir}/src/WebContent/WEB-INF/web.xml</webXml> 
    <warSourceDirectory>${basedir}/src/WebContent</warSourceDirectory> 
    </configuration> 
</plugin> 
+0

Co jeśli nie mam web.xml w mojej aplikacji sieciowej? – Vivek

+1

@Vivek dodaj false do konfiguracji – bigGuy

0

Wpadłem ostatnio na ten problem, a problem polegał na tym, że moja klasa zasobów nie określała początkowej ścieżki na początku klasy. Każda metoda określała ścieżkę, ale nic nie określało początkowej ścieżki.

Przykład:

@Path("/") 
public class MyResource { 

@GET 
@Produces("text/html") 
public String foo() { 
    return "foo"; 
} 

@GET 
@Path("pt") 
@Produces("text/html") 
public String bar() { 
    return "bar"; 
} 

będzie działać dobrze. Ale

public class MyResource { 

@GET 
@Produces("text/html") 
public String foo() { 
    return "foo"; 
} 

@GET 
@Path("pt") 
@Produces("text/html") 
public String bar() { 
    return "bar"; 
} 

nie

-2

Obserwuję samouczek http://www.vogella.com/tutorials/REST/article.html i uzyskać następujące gdy wdrożyć końcowy wniosek CRUD. Używam katalogu WebContent i ustawiłem go w mojej wtyczce wojennej. Używam wersji 1.19 Jersey i 3.1 servlet API.

04-Mar-2015 11:10:11.287 INFO [localhost-startStop-1] com.sun.jersey.api.core.ScanningResourceConfig.init No provider classes found. 
04-Mar-2015 11:10:11.429 INFO [localhost-startStop-1] com.sun.jersey.server.impl.application.WebApplicationImpl._initiate Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 05:39 AM' 
04-Mar-2015 11:10:12.102 SEVERE [localhost-startStop-1] com.sun.jersey.spi.inject.Errors.processErrorMessages The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for constructor public com.enigma.restful.TodoService(javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,java.lang.String) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.enigma.restful.TodoService(javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,java.lang.String) at parameter index 1 
    SEVERE: Missing dependency for constructor public com.enigma.restful.TodoService(javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,java.lang.String) at parameter index 2 
0

Jeśli używasz eclispe, należy kliknąć prawym przyciskiem myszy projekt i stworzyć Maven „projekt”. Możesz skompilować jako pakiet z wiersza poleceń z aktualizacjami za pomocą generatora mvn: archetype -B -cpu, ale być może będziesz musiał ręcznie zbudować kilka rzeczy. Dzięki temu będzie działać jako aplikacja internetowa lub aplikacja kliencka. Dodaj ten kod do pom.xml.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
Powiązane problemy