Beim Kompilieren eines Maven-Projekts bekomme ich diesen Fehler während der Validierungsphase von pom.xml
. Es ist ein ziemlich großes Projekt mit komplexem Build-Prozess. Das Projekt enthält nur JavaScript-Code und muss nicht in war
kompiliert werden. Ich suche nach einem Weg, entweder:
failOnMissingWebXml
deaktivieren (es scheint ein nicht kritischer Eclipse-Fehler zu sein).Der volle Fehler:
Description Resource Path Location Type web.xml is missing
and <failOnMissingWebXml> is set to true pom.xml /testproject line 6
Maven Java EE Configuration Problem
Nach dem Klicken auf den Fehler scheint das Problem in dieser Zeile von pom.xml
zu sein:
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.scs</groupId>
<artifactId>scs-control-panel</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging> **THE ERROR POINTS TO THIS LINE**
<parent>
<groupId>com.scs</groupId>
<artifactId>scs</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../scs</relativePath>
</parent>
<build>
</build>
<dependencies>
</dependencies>
</project>
Nicht sicher, ob dies ein Eclipse- oder Maven-Fehler ist, aber wahrscheinlich Eclipse, da Maven die Befehlszeile problemlos ausführt. Es kann auch ein Fehler in Eclipse sein. Ich verwende Eclipse Java EE IDE für Web Developers Version: Mars.1 Release (4.5.1).
UPDATE1: Ich habe versucht, das Projekt in Eclipse zu aktualisieren, jedoch keinen Unterschied.
UPDATE2: Ich habe versucht, den Pakettyp von war
in pom
zu ändern, aber keinen Unterschied.
In Maven dreht sich alles um Plugins. Plugins sind die Programme, die ein bestimmtes Verhalten im Erstellungsprozess ausführen. Einige Plugin-Einschlüsse sind impliziert, ohne dass wir etwas erklären müssen.
Diese implizierten haben Standardkonfigurationen. Zum Beispiel ist der maven-compiler-plugin
in allen Projekten enthalten, ohne dass er deklariert werden muss. Um die Standardkonfigurationen zu überschreiben, müssen Sie das Plug-In in der Datei pom.xml deklarieren und die Konfigurationen festlegen. Beispielsweise werden viele Projekte den Standardwert für maven-compiler-plugin
überschreiben, für den source
und target
auf Java 1.5 eingestellt sind. Wir können zu 1.8 wechseln
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Dies ist nur eine Theorie hinter den Plugins, um Ihnen eine Vorstellung davon zu geben, was los ist.
Wenn <packaging>war<packaging>
verwendet wird, wird der maven-war-plugin
verwendet, ohne dass wir etwas erklären müssen. Genau wie bei der Verwendung von <packaging>jar</packaging>
ist die Einbeziehung von maven-jar-plugin
impliziert.
Die Standardkonfiguration für maven-war-plugin
ist der Fehler, wenn kein web.xml
vorhanden ist (diese Konfigurationseigenschaft ist failOnMissingWebXml
). Wenn Sie diesen Standardwert überschreiben möchten, müssen Sie das Plugin deklarieren und den Wert für die Eigenschaft auf false setzen (nicht fehlschlagen).
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
Tun:
mvn clean Eclipse:clean
Fügen Sie dies Ihrem POM hinzu:
<packaging>war</packaging>
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
Füge die untenstehende Eigenschaft zu POM.xml hinzu
<failOnMissingWebXml>false</failOnMissingWebXml>
Ich denke, der einfachste Weg ist die Wahl der War Plugin-Version 3. Der default value für failOnMissingWebXml wurde von true in false geändert.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
Einmal in Ihrem Pom eingesetzt, verschwindet der böse Fehler für immer.
Ich konnte dieses Problem durch Hinzufügen dieser Eigenschaft in POM.xml wie folgt beheben.
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>