繁体   English   中英

来自Java 11项目的Maven-pmd-plugin的UnsupportedClassVersionError

[英]UnsupportedClassVersionError from maven-pmd-plugin for java 11 project

我们正在将Java 8项目迁移到Java11。JAVA_HOME仍然指向Java 8,但是第一个要迁移的项目在Java 11中编译,并且单元测试运行良好。

maven-compiler-plugin和工具链的定义如本问题所述 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-plugin呢? 应该检查源代码,不要管编译的类。

除了将JAVA_HOME设置为11以外,还有其他解决方法吗?

实际上,PMD确实关心用于类型解析的已编译类。

PMD能够检查变量类型,方法返回类型等,以用于其分析。 为此,PMD使用编译的类和完整的依赖项类路径。

您可以通过将插件的配置typeResolution属性设置为false来禁用此功能,但是要注意 ,一些规则依赖于此信息,并且在无法尽力而为的情况下,这意味着您会在分析。

不使用类型分辨率会极大地妨碍PMD的分析质量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM