2010-06-28 2 views
9

При выполнении mvn install, я получаю следующее сообщение об ошибке:Maven ошибки при построении пакета WAR (? Web.xml отсутствует ..)

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

Моего веб-приложениях структура дерево таково:

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

Мой файл POM выглядит следующим образом:

<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> 

Как правильно исправить эту проблему?

С уважением

ответ

19

Я сильно рекомендуем использовать Maven's standard layout:

  • поместите источники Java в src/main/java (и удалите элемент sourceDirectory)
  • положил источники веб-приложений в src/main/webapp
  • удалить classes и lib каталоги под WEB-INF

Конечно, вы можете настроить расположение, но это IMO больше неприятностей и бесполезных усилий, чем выгоды. Просто следуйте соглашениям.

+0

Спасибо! Я потратил много времени на выяснение, почему JSF не был рендерингом, и у меня был WEB-INF в другом каталоге, а затем, играя с IDEA .iml-файлом, я получил его, добавив дескриптор развертывания для web.xml , что странно, что это перестало работать. Думаю, теперь все будет хорошо;) –

13

Я предполагаю, что maven-war-plugin ищет src/main/webapp/WEB-INF/web.xml, но не может найти его и хочет, чтобы вы указали явное (не-maven-стандартное) местоположение. Если вы не можете переименовать WebContent в webapp и переместить его под src/main/ (рекомендуется), вы можете попробовать добавить что-то вроде этого, чтобы ваш <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

Что делать, если у меня нет web.xml в моем веб-приложении? – Vivek

+1

@Vivek добавить false в конфигурацию – bigGuy

0

Недавно я столкнулся с этой проблемой, и проблема заключалась в том, что мой класс ресурсов не указывал начальный путь в верхней части класса. Каждый метод задавал путь, но ничего не указывал начальный путь.

Пример:

@Path("/") 
public class MyResource { 

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

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

будет работать нормально. Но,

public class MyResource { 

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

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

не

-2

Я после http://www.vogella.com/tutorials/REST/article.html учебник и получить следующий, когда я раскрываю конечное приложение CRUD. Я использую каталог WebContent и установил его в своем военном плагине. Я использую версии API 1.19 Джерси и 3.1 сервлета.

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

Если вы используете eclispe, убедитесь, щелкните правой кнопкой мыши проект и создать Maven «проект». Вы можете скомпилировать как пакет из командной строки с обновлениями, используя mvn generate: archetype -B -cpu, но вам, возможно, придется вручную структурировать несколько вещей. При этом он будет работать как веб-приложение или клиентское приложение. Добавьте этот код в 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> 
Смежные вопросы