首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnsupportedClassVersionError来自maven-pmd-plugin for java 11项目

UnsupportedClassVersionError来自maven-pmd-plugin for java 11项目
EN

Stack Overflow用户
提问于 2018-12-14 15:21:52
回答 1查看 900关注 0票数 2

我们正在将java 8项目迁移到java 11。JAVA_HOME仍然指向java 8,但是迁移的第一个项目在java 11中编译,单元测试运行得很好。

maven编译器插件和工具链在这个问题中定义.Maven版本为3.5.0。

当我跑的时候

代码语言:javascript
复制
mvn verify

我得到以下错误:

代码语言:javascript
复制
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之外,还有其他解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 15:41:12

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

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

您可以通过false对插件的配置禁用此功能,但是要警告,有几条规则依赖于此信息,并且在无法尽最大努力工作时,这意味着您将在分析中获得更多的假阳性/阴性信息。

由于不使用类型分辨率,PMD的分析质量受到严重影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53782503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档