7

我正在尝试从 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 来修复损坏的类文件错误——这些 jarjavac不需要查看,但显然需要查看scalac。但在这种情况下,我不知道我可以添加哪些其他罐子。

4

2 回答 2

4

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

于 2013-09-03T20:23:45.413 回答
4

RobN 的答案是正确的,但我想我会根据自己的经验写一个更长的答案。这与RobN 提到的关于 Guava 问题7761095的这个问题和讨论有关。

我在尝试访问时遇到了同样的问题

com.google.common.io.BaseEncoding.base64()

Eclipse 声称 base64 成员不存在,并且 Gradle build 在问题中产生错误:

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

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

显式添加可选的依赖项应该可以解决问题。

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

摇篮:

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

马文:

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.2</version>
</dependency>
于 2014-01-19T15:58:34.743 回答