Scala错误:类文件坏了,坏常量池索引

时间:2013-09-03 19:15:58

标签: scala scala-2.10

我正在尝试从Scala调用Selenium Java库。我正在使用Scala IDE(Eclipse)和Scala 2.10.2。导致此编译器错误的原因是什么?

error while loading Function, class file '/Dev/selenium-2.35.0/libs/guava-
14.0.jar(com/google/common/base/Function.class)' is broken 
(class java.lang.RuntimeException/bad constant pool index: 0 at pos: 479)   

有时我通过添加更多的jar来修复损坏的类文件错误 - javac不需要看到的jar,但显然scalac。但是这种情况我不知道我能添加的其他罐子。

2 个答案:

答案 0 :(得分:4)

找到答案。这是由https://code.google.com/p/guava-libraries/issues/detail?id=1095造成的。当我添加jsr305 jar时,错误消失了。

答案 1 :(得分:4)

罗宾的答案是正确的,但我想我会用自己的经验写一点点答案。这与this question以及RobN提到的番石榴问题7761095的讨论有关。

我在尝试访问

时遇到同样的问题
com.google.common.io.BaseEncoding.base64()

Eclipse声称base64成员不存在且Gradle构建 在问题中产生错误:

[ant:scalac] error: error while loading BaseEncoding, class file 
   '.../guava-16.0.jar(com/google/common/io/BaseEncoding.class)' is broken

错误是由可选依赖Guava's pom.xml中的某些注释引起的。如this answer中所述,Java编译器忽略 没有找到相应类文件的注释,但是Scala编译器 需要定义编译。

明确添加可选的依赖项应解决问题。

在这种特殊情况下,Guava's pom.xml具有以下可选依赖项,并将以下依赖项声明添加到项目中将解决问题:

摇篮:

compile 'com.google.code.findbugs:jsr305:2.0.2'

的Maven:

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.2</version>
</dependency>