<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 编译器传递额外的参数。你看到的这三个参数分别对应不同的编译选项,下面是详细解释:
- 作用:
保留方法参数名到编译后的字节码中,以便在运行时通过反射获取参数名。
- 示例:
假设你有一个方法 public void saveUser(String username, int age)
,默认编译后参数名会变成 arg0
, arg1
,而添加 -parameters
后,反射获取参数名时会显示 username
和 age
。
- 使用场景:
- 依赖反射获取参数名的框架(如 Spring MVC 的自动参数绑定)。
- 生成更易读的调试信息。
- 作用:
强制 Java 编译器 / 运行时包含指定的模块(即使项目没有显式声明依赖)。
- 背景:
Java 9+ 引入了模块化系统(JPMS),某些类被封装在模块中,需要显式声明依赖才能使用。例如:
org.w3c.dom
接口属于 java.xml
模块。
- 如果项目未在
module-info.java
中声明 requires java.xml;
,编译器会报错。
- 解决方式:
通过 --add-modules java.xml
告诉编译器:“即使项目没声明,也把 java.xml
模块包含进来”。