我们正在将java 8项目迁移到java 11。JAVA_HOME仍然指向java 8,但是迁移的第一个项目在java 11中编译,单元测试运行得很好。
maven编译器插件和工具链在这个问题中定义.Maven版本为3.5.0。
当我跑的时候
mvn verify我得到以下错误:
Failed to execute goal org.apache.maven.plugins:maven-pmd-plugin:3.11.0:
pmd (pmd) on project <yourproject>:
Execution pmd of goal org.apache.maven.plugins:maven-pmd-plugin:3.11.0:
pmd failed: An API incompatibility was encountered while executing
org.apache.maven.plugins:maven-pmd-plugin:3.11.0:pmd:
java.lang.UnsupportedClassVersionError:
<Yourclass> has been compiled by a more recent version of the Java Runtime
(class file version 55.0), this version of the Java Runtime only recognizes
class file versions up to 52.0 //(indentation added for readability)我了解到这些类是使用java 11编译的(如预期的那样),而maven运行在java 8上,因为这正是JAVA_HOME所指向的。但是为什么pmd-插件会被绊倒呢?它应该检查源代码,更不用说编译的类了。
除了将JAVA_HOME设置为11之外,还有其他解决办法吗?
发布于 2018-12-14 15:41:12
实际上,PMD确实关心用于类型解析的编译类。
PMD能够检查变量类型、方法返回类型等,以便在其分析中使用。为此,PMD使用已编译的类和完整的依赖类路径。
您可以通过false对插件的配置禁用此功能,但是要警告,有几条规则依赖于此信息,并且在无法尽最大努力工作时,这意味着您将在分析中获得更多的假阳性/阴性信息。
由于不使用类型分辨率,PMD的分析质量受到严重影响。
https://stackoverflow.com/questions/53782503
复制相似问题