运行JavaFX应用后Maven报“Plugin validation issues”的原因及解决方法
我用IntelliJ IDEA 2023.2 RC自带的JavaFX模板创建了新的JavaFX/OpenJFX项目,Java和JavaFX版本都是20。在IntelliJ的Maven面板里选Plugins > javafx > javafx:run运行应用,退出后控制台弹出以下警告:
[WARNING] [WARNING] Plugin validation issues were detected in 2 plugin(s) [WARNING] [WARNING] * org.openjfx:javafx-maven-plugin:0.0.8 [WARNING] * org.apache.maven.plugins:maven-resources-plugin:3.3.0 [WARNING] [WARNING] For more or less details, use 'maven.plugin.validation' property with one of the values (case insensitive): [BRIEF, DEFAULT, VERBOSE] [WARNING]
这些警告只在退出应用后显示。我想知道这些警告是什么意思,怎么解决?
另外,javafx-maven-plugin已经是最新版,maven-resources-plugin是3.3.0,只比最新版3.3.1旧一点,我觉得版本不是问题。按照警告提示,我在POM里定义了maven.plugin.validation属性,但没效果,控制台没显示更多细节:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.plugin.validation>VERBOSE</maven.plugin.validation> </properties>
我找了相关问题但答案都不适用,网页搜索也没找到有用信息。修改后的完整POM内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>work.basil.voters</groupId> <artifactId>voters_wa</artifactId> <version>1.0-SNAPSHOT</version> <name>Voters WA</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.plugin.validation>VERBOSE</maven.plugin.validation> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>20</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>20</version> </dependency> <dependency> <groupId>org.controlsfx</groupId> <artifactId>controlsfx</artifactId> <version>11.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.10.0</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>20</source> <target>20</target> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <!-- Default configuration for running with: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>work.basil.voters.voters_wa/work.basil.voters.voters_wa.HelloApplication</mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
警告含义
这些警告是Maven的插件校验机制触发的,说明这两个插件不符合当前Maven版本的规范要求——比如使用了已过时的API、依赖了不再维护的库,或者未适配Maven最新的插件开发标准。这类警告一般不会影响项目运行,只是Maven在提醒你插件存在潜在的兼容性风险。
至于你设置maven.plugin.validation=VERBOSE没生效,大概率是因为通过IntelliJ的Maven面板触发命令时,IDE没有把这个属性传递给Maven进程。
解决方法
1. 查看详细警告信息
不要通过IntelliJ的Maven面板运行,改用终端执行命令:
mvn javafx:run -Dmaven.plugin.validation=VERBOSE
这样就能看到具体的校验问题细节,比如哪个API过时、哪里不符合规范,方便针对性处理。
2. 处理maven-resources-plugin的警告
虽然版本差距小,但升级到最新版3.3.1确实能解决大部分校验问题。直接在POM的<build><plugins>里显式声明这个插件的最新版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> </plugin>
Maven默认会继承父POM的插件版本,显式声明可以覆盖默认版本,避免旧版带来的警告。
3. 处理javafx-maven-plugin的警告
这个插件的0.0.8确实是最新稳定版,它的校验警告一般是因为还没适配Maven最新的插件API规范。目前没有更新版本可以解决,你可以:
- 忽略警告:毕竟不影响项目运行,等插件官方更新后再升级。
- 尝试快照版:如果官方有正在开发的快照版,可能修复了校验问题,但快照版稳定性不如稳定版,需谨慎使用。
4. 临时禁用插件校验
如果实在不想看到这些警告,可以在POM里把校验级别设为NONE:
<properties> <maven.plugin.validation>NONE</maven.plugin.validation> </properties>
不过这只是隐藏警告,没有解决根本问题,不推荐长期使用。
内容的提问来源于stack exchange,提问作者Basil Bourque

