如何通过命令行向Maven传递Java编译器选项-Xlint:unchecked
解决方案
配置不生效是几个低级问题叠加导致的,对应修复即可:
- 首先修正命令格式错误:
-D和后续的属性名之间不能加空格,你写的-D exec.args中间带空格,Maven会直接把exec.args识别成要执行的构建目标,根本不会把它当成配置属性读取。 - 其次处理Shell参数截断问题:属性值带特殊符号(横杠、冒号)时,必须用双引号把整个属性值包裹,否则命令行会把参数拆分,Maven拿不到完整的配置值。
- 最后确认你参数传对了插件:
exec.args是exec-maven-plugin的专属参数,只有执行exec:java、exec:exec这两个插件目标时才会生效,跑compile、package这类常规构建阶段时,exec插件根本不会触发,你传的参数自然完全没用。
分场景的正确配置方式
- 如果你是要给exec插件启动的Java程序传命令行参数,用下面的命令:
mvn exec:java -Dexec.args="-Xlint:unchecked"
如果是要给exec插件启动的JVM传虚拟机参数,不要用exec.args,换成exec.jvmArgs:
mvn exec:java -Dexec.jvmArgs="-Xlint:unchecked"
- 如果你配置
-Xlint:unchecked是想让编译阶段javac输出泛型未检查转换的警告,那你完全传错了参数位置,不要给exec插件传,两种正确写法:
- 临时命令行生效:
mvn clean compile -Dmaven.compiler.args="-Xlint:unchecked"
- 项目永久生效,在pom.xml中配置编译插件参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <compilerArgs> <arg>-Xlint:unchecked</arg> </compilerArgs> </configuration> </plugin>
配置完成后执行编译命令,就能正常看到对应的unchecked警告输出了。
内容的提问来源于stack exchange,提问作者Troskyvs
相关产品推荐
相关产品推荐

