google errorprone java.lang.NoSuchMethodError

时间:2018-04-19 13:30:10

标签: gradle guava errorprone

我们正面临一个奇怪的问题。我们使用net.ltgt.errorprone,版本(0.0.8),以及guava(版本21)和gradle(版本3.1)。一切都很好,直到今天早上。但突然间所有开发人员都开始收到此错误

[system.err] An exception has occurred in the compiler (1.8.0_162). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.NoSuchMethodError: com.google.common.base.Verify.verify(ZLjava/lang/String;Ljava/lang/Object;)V
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:132)

我们通过互联网搜索,大多数解决方案都与番石榴有关,但番石榴版本没有变化 errorprone或gradle很长一段时间。我们也试过运行旧代码,得到同样的错误。我们无法理解问题的根本原因。有没有人面临同样的问题?

2 个答案:

答案 0 :(得分:0)

com.google.collections:google-collections被重命名为com.google.guava:guava,这真的很烦人,并且通常会导致类路径上的两个版本的库。

以下是我诊断问题的方法

  1. 在“破损”版本中运行gradle dependencies
  2. 回到源代码管理历史(git?),直到你有一个工作版本
  3. 在“工作”版本
  4. 中运行gradle dependencies
  5. 查找com.google.collections:google-collections
  6. 版本的差异
  7. 查找com.google.guava:guava
  8. 版本的差异

    请参阅Gradle文档中的here,其中讨论了guava重命名

    您可能需要将其添加到build.gradle

    dependencies {
        modules {
            module("com.google.collections:google-collections") {
                replacedBy("com.google.guava:guava", "google-collections is now part of Guava")
            }
        }
    }
    

答案 1 :(得分:0)

发布了errorprone的新版本(2.3.0),这打破了我们的构建。

我们使用此命令

找出依赖关系
./gradlew -q dependencyInsight --configuration errorprone --dependency error_prone_core

这清楚地表明正在使用最新版本。我们强行使用最后一个可行的版本来修复它。以下行添加到build.gradle文件

configurations.all {
    resolutionStrategy {
        force 'com.google.errorprone:error_prone_core:2.2.0'
    }
}