当我创建 Maven 项目时,我在
pom.xml
中收到此错误
无法初始化类 org.apache.maven.plugin.war.util.WebappStructureSerializer
-Maven配置问题web.xml 丢失并且
设置为 true。
可能是因为你的项目中
maven-war-plugin
的版本太旧了。
尝试在您的
pom.xml
中添加以下代码
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
</plugins>
</build>
</project>
注意:您应该有构建标签 然后将所有内容放在构建标签内,它不会抛出错误
如果您在 Eclipse 中遇到此错误(在撰写本文时,我的 Eclipse 版本为
Version: 2021-09 (4.21.0), Build id: 20210910-1417
)并且您最近尝试迁移到 JDK 17,则 Eclipse 似乎与 JDK 17 不兼容。它至少需要 JDK 11。我恢复到 Java 11.0.12,错误消失了。
我使用的是 Windows 10 和 Eclipse 版本:2022-03 (4.23.0) 内部版本号:20220310-1457
我的项目使用JDK8,但较新版本的Eclipse至少需要JDK11。 我使用 Window->Preferences->Java->Installed JRE 进行配置 如截图所示:
Windows cmd shell 中的 Maven 工作正常:
mvn clean package
但是,Eclipse 在我的 pom.xml 上给出了错误:
Could not initialize class org.apache.maven.plugins.war.util.WebappStructureSerializer
作为参考,当我尝试修复该问题时,Eclipse 给出了一些其他错误消息,例如以下一条:
Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module
这个错误似乎是maven-war-plugin和eclipse运行的JDK17的一些兼容性问题。这可能是由于“模块”权限所致。
使用这些有用的答案,我找到了解决方法:
@Capricorn1https://stackoverflow.com/a/69544567/4505142
@SreedharGShttps://stackoverflow.com/a/29383652/4505142
我从以下位置下载了 OpenJDK11:https://adoptium.net/
更新了 eclipse.ini 以使用 JDK11 而不是 JDK17:
--launcher.appendVmargs
-vm
C:\Users\User1\OpenJDK11\jdk-11.0.15+10\bin
-vmargs
-Dosgi.requiredJavaVersion=11
[email protected]/eclipse-workspace
-Dsun.java.command=Eclipse
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=11
-Dosgi.dataAreaRequiresExplicitInit=true
-Dorg.eclipse.swt.graphics.Resource.reportNonDisposed=true
-Xms512m
-Xmx1024m
--add-modules=ALL-SYSTEM
作为参考,这里是原始的 eclipse.ini JDK17 路径:
-vm
plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_17.0.2.v20220201-1208/jre/bin
使用JDK11运行Eclipse,消除了pom.xml错误“无法初始化类org.apache.maven.plugins.war.util.WebappStructureSerializer”
作为参考,这里是我的 pom.xml 的相关片段:
<properties>
<spring-boot.version>1.5.13.RELEASE</spring-boot.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version>
<maven-war-plugin.version>3.0.0</maven-war-plugin.version>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven-war-plugin.version}</version>
<configuration>
<packagingExcludes>**/application-*.properties</packagingExcludes>
</configuration>
<executions>
<execution>
<id>default-war</id>
<phase>prepare-package</phase>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<id>build-info</id>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在Pom.xml中,需要添加以下代码片段,请找到图片附件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
</plugins>
</build>
请使用以下代码片段:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</pluginManagement>
请参考这个
我更新了 Eclipse 并将编译器和 JDK 设置为 17。
尝试将插件添加到您的 Maven 项目中,方法是将其添加到您的 pom.xml 中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
之后:右键 -> Maven -> 更新项目
我在创建maven项目时遇到了同样的问题。所以我找到了一个解决方案,只需将此插件添加到您的 pom.xml 中即可:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
如果您已经拥有它,那么您应该升级它的版本。