Ошибка Maven при сборке пакета WAR (отсутствует web.xml ..?) - PullRequest
10 голосов
/ 29 июня 2010

При выполнении mvn install я получаю следующую ошибку:

Ошибка сборки WAR: требуется атрибут webxml (или существующий ранее WEB-INF / web.xml при выполнении в режиме обновления)

Дерево структуры моего веб-приложения выглядит следующим образом:

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>

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

С уважением

Ответы [ 5 ]

19 голосов
/ 29 июня 2010

I настоятельно рекомендуем использовать Стандартная раскладка Maven :

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

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

13 голосов
/ 29 июня 2010

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

Посмотрите на этот комментарий:

Maven: включение папки META-INF в папку классов

Я полагаю, что Maven ожидает папку с именем "webapp", а не "WebContent".

0 голосов
/ 17 марта 2016

Если вы используете 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>
0 голосов
/ 26 мая 2011

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

Пример:

@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";
}

не будет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...