无法初始化类 org.apache.maven.plugin.war.util.WebappStructureSerializer -Maven 配置问题 有解决方案吗?

问题描述 投票:0回答:9

当我创建 Maven 项目时,我在

pom.xml

中收到此错误

无法初始化类 org.apache.maven.plugin.war.util.WebappStructureSerializer
-Maven配置问题

web.xml 丢失并且 设置为 true。

eclipse maven servlets
9个回答
97
投票

可能是因为你的项目中

maven-war-plugin
的版本太旧了。

尝试在您的

pom.xml

中添加以下代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.1</version>
</plugin>

18
投票
<build>
      <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.1</version>
        </plugin>
    </plugins>
  </build>
</project>

注意:您应该有构建标签 然后将所有内容放在构建标签内,它不会抛出错误


13
投票

如果您在 Eclipse 中遇到此错误(在撰写本文时,我的 Eclipse 版本为

Version: 2021-09 (4.21.0), Build id: 20210910-1417
)并且您最近尝试迁移到 JDK 17,则 Eclipse 似乎与 JDK 17 不兼容。它至少需要 JDK 11。我恢复到 Java 11.0.12,错误消失了。


5
投票

我使用的是 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>

2
投票

在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>
  • 更新 Maven 项目后

enter image description here


1
投票

请使用以下代码片段:

 <pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.3.2</version>
    </plugin>
  </plugins>
</pluginManagement>

请参考这个


0
投票

我更新了 Eclipse 并将编译器和 JDK 设置为 17。


-1
投票

尝试将插件添加到您的 Maven 项目中,方法是将其添加到您的 pom.xml 中

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.1</version>
</plugin>

之后:右键 -> Maven -> 更新项目


-3
投票

我在创建maven项目时遇到了同样的问题。所以我找到了一个解决方案,只需将此插件添加到您的 pom.xml 中即可:

<plugin> 
      <artifactId>maven-war-plugin</artifactId>
      <version>3.2.2</version>
</plugin>

如果您已经拥有它,那么您应该升级它的版本。

© www.soinside.com 2019 - 2024. All rights reserved.