Gradle PMD-plugin获取java.lang.NoClassDefFoundError:org / w3c / dom / ElementTraversal

时间:2015-10-26 06:03:05

标签: java gradle pmd

我们刚刚将PMD插件添加到我们的Gradle构建中,它在我的开发人员计算机上工作得很好,但在我们的构建服务器上却失败了。 错误消息是

  
      
  • 出了什么问题:
      任务':pmdMain'。执行失败   java.lang.NoClassDefFoundError:org / w3c / dom / ElementTraversal
  •   

Gradle版本和Java版本在两台机器上都是相同的 - " Gradle 2.7"和" 1.8.0_60(Oracle Corporation 25.60-b23)"。

我已经看到有些人遇到了xml-apis依赖问题,但是当我运行" gradle依赖"在我的本地机器上没有xml-apis-dependency。

修改 尽管它感觉不对,但我已尝试在xml-apis中添加依赖项,但结果相同。

有什么想法吗?

关心彼得

1 个答案:

答案 0 :(得分:2)

这可能是由于xerxes版本,PMD正在使用,它过渡依赖于xml-apis。虽然Gradle和Java版本相同,但文件系统可能不同,因此类路径排序可能不同 - 例如一个不同的xml-apis jar文件可以隐藏另一个。

默认情况下,gradle uses PMD 5.2.3

然而,在PMD 5.3.0中,有两件事发生了变化:

  • PMD已经模块化 - 这意味着,gradle插件现在只使用pmd-java的依赖项,并且不需要所有支持语言的依赖项。
  • 已删除xerces依赖项,仅使用默认的Java XML API。

因此,将toolVersion设置为5.3.5甚至5.4.0可以避免此问题。

pmd {
  toolVersion = "5.3.5"
  ...
}