如果我将mack-war-plugin配置为在缺少web.xml时失败,为什么缺少web.xml失败?

时间:2014-06-18 17:02:56

标签: java maven maven-3 war maven-war-plugin

这是一个挑战:为什么这个版本失败了?

我已经配置了Maven的maven-war-plugin,在一个绝对的web.xml文件中不会失败,似乎:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <executions>
            <execution>
                <id>prepare-war</id>
                <phase>prepare-package</phase>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <archiveClasses>false</archiveClasses>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix />
                        </manifest>
                        <manifestEntries>
                            <Implementation-Build>${build.number}</Implementation-Build>
                            <Implementation-Title>${project.name}</Implementation-Title>
                            <Built-By>${user.name}</Built-By>
                            <Built-OS>${os.name}</Built-OS>
                            <Build-Date>${build.date}</Build-Date>
                        </manifestEntries>
                    </archive>
                    <webResources>
                        <resource>
                            <!-- this is relative to the pom.xml directory -->
                            <directory>./target/dist</directory>
                        </resource>
                    </webResources>
                </configuration>
            </execution>
        </executions>
    </plugin>

但是,尽管有这样的配置,它仍然像这样失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

我实际上没有web.xml,所以我需要它来组装没有它的战争。

我尝试在配置中添加虚假<webXml>none</webXml>,但这并没有改变任何内容......

我缺少什么?

3 个答案:

答案 0 :(得分:10)

这应该有效:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
            <executions>
                <execution>
                    <id>prepare-war</id>
                    <phase>prepare-package</phase>
                    <configuration>
                        <archiveClasses>false</archiveClasses>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix />
                            </manifest>
                            <manifestEntries>
                                <Implementation-Build>${build.number}</Implementation-Build>
                                <Implementation-Title>${project.name}</Implementation-Title>
                                <Built-By>${user.name}</Built-By>
                                <Built-OS>${os.name}</Built-OS>
                                <Build-Date>${build.date}</Build-Date>
                            </manifestEntries>
                        </archive>
                        <webResources>
                            <resource>
                                <!-- this is relative to the pom.xml directory -->
                                <directory>./target/dist</directory>
                            </resource>
                        </webResources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

请注意,<failOnMissingWebXml>false</failOnMissingWebXml>部分已移至插件配置而非执行。

答案 1 :(得分:6)

POM中的执行ID为prepare-war。 Maven为包装类型为war的项目运行自己的war插件默认执行。默认执行具有ID default-war。由于当前配置了POM,war目标正在运行两次。

如果您查看错误消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

您可能会在括号(default-war)中看到失败的执行ID。如果您将执行ID更改为default-war,您的问题就会消失,并且您将不再执行两次战争目标的执行。

答案 2 :(得分:0)

问题与您当前使用的版本有关。您需要查看本地存储库,并查看已经下载的版本。转到您的.m2文件夹并查找

.m2\repository\org\apache\maven\plugins\maven-compiler-plugin

在该文件夹中,您可以看到可用的版本。

更改文件夹中具有的版本的版本,即可使用!