org.w3c.dom.Element加载不了

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>17</source>
                <target>17</target>
                <compilerArgs>
                    <arg>-parameters</arg>
                    <arg>--add-modules</arg>
                    <arg>java.xml</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

  

在 Maven 配置中,<compilerArgs> 用于向 Java 编译器传递额外的参数。你看到的这三个参数分别对应不同的编译选项,下面是详细解释:

1. <arg>-parameters</arg>

  • 作用:
    保留方法参数名到编译后的字节码中,以便在运行时通过反射获取参数名。
  • 示例:
    假设你有一个方法 public void saveUser(String username, int age),默认编译后参数名会变成 arg0arg1,而添加 -parameters 后,反射获取参数名时会显示 username 和 age
  • 使用场景:
    • 依赖反射获取参数名的框架(如 Spring MVC 的自动参数绑定)。
    • 生成更易读的调试信息。

2. <arg>--add-modules</arg> 和 <arg>java.xml</arg>

  • 作用:
    强制 Java 编译器 / 运行时包含指定的模块(即使项目没有显式声明依赖)。
  • 背景:
    Java 9+ 引入了模块化系统(JPMS),某些类被封装在模块中,需要显式声明依赖才能使用。例如:
    • org.w3c.dom 接口属于 java.xml 模块。
    • 如果项目未在 module-info.java 中声明 requires java.xml;,编译器会报错。
  • 解决方式:
    通过 --add-modules java.xml 告诉编译器:“即使项目没声明,也把 java.xml 模块包含进来”。

为什么需要这些参数?

    • -parameters 的必要性:
      如果你的项目使用反射获取方法参数名(如 Spring MVC、MyBatis),必须添加此参数,否则框架可能无法正确识别参数名称。
    • --add-modules java.xml 的必要性:
      在 JDK 9+ 中,org.w3c.dom 被封装在 java.xml 模块中。如果项目:
      1. 未使用模块化(没有 module-info.java 文件)。
      2. 但依赖了需要 org.w3c.dom 的库(如 Apache FOP、JAXB)。
        则编译器会找不到 org.w3c.dom,此时需要通过 --add-modules 强制包含该模块。
posted @ 2025-07-02 10:41  全琪俊  阅读(11)  评论(0)    收藏  举报