这是一个挑战:为什么这个版本失败了?
我已经配置了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>
,但这并没有改变任何内容......
我缺少什么?
答案 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
在该文件夹中,您可以看到可用的版本。
更改文件夹中具有的版本的版本,即可使用!