在编译Maven项目时,我在pom.xml
的验证阶段遇到此错误。这是一个包含复杂构建过程的大型项目。该项目仅包含JavaScript代码,不必编译为war
。我正在寻找一种方法:
failOnMissingWebXml
来禁用错误(它似乎是一个非关键的Eclipse错误)完整的错误:
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
点击错误之后问题就出现在pom.xml
的这一行:
<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>
不确定这是Eclipse还是Maven错误,但可能是Eclipse,因为Maven通过命令行顺利运行。它也可能是Eclipse中的一个错误,我正在运行Eclipse Java EE IDE for Web Developers Version:Mars.1 Release(4.5.1)。
UPDATE1:我尝试在Eclipse中更新项目,但没有区别。
UPDATE2:我尝试将包类型从war
更改为pom
,但没有区别。
Maven中的所有内容都围绕着插件。插件是在构建过程中执行某些行为的程序。隐含一些插件内容而我们不必声明任何内容。
这些暗示具有默认配置。例如,maven-compiler-plugin
包含在所有项目中,无需声明它。要覆盖默认配置,我们需要在pom.xml文件中声明插件并设置配置。例如,你会看到许多项目覆盖maven-compiler-plugin
上的默认值,它的source
和target
设置为Java 1.5。我们可以改为1.8
<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>
这只是插件背后的一些理论,可以让您了解正在发生的事情。
话虽如此,为了使用<packaging>war<packaging>
,使用maven-war-plugin
而我们不必申报任何东西。就像使用<packaging>jar</packaging>
时一样,隐含了maven-jar-plugin
的含义。
maven-war-plugin
的默认配置是没有web.xml
的失败(该配置属性为failOnMissingWebXml
)。因此,如果我们要覆盖此默认值,我们需要声明插件,然后将属性的值设置为false(不失败)
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
mvn clean eclipse:clean
<packaging>war</packaging>
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
将以下属性添加到POM.xml
<failOnMissingWebXml>false</failOnMissingWebXml>
我想最简单的方法是选择war插件版本3. failOnMissingWebXml的默认值已从true更改为false。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
一旦进入你的pom,那令人讨厌的错误永远消失了。
我能够通过在POM.xml中添加此属性来解决此问题,如下所示。
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>