2013-09-03 2 views
7

Ich versuche, die Selenium Java-Bibliotheken von Scala aufrufen. Ich benutze Scala IDE (Eclipse) und Scala 2.10.2. Was verursacht diesen Compilerfehler?Scala Fehler: Klassendatei ist kaputt, Bad Constant Pool Index

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) 

Manchmal löse ich gebrochene Klassendatei Fehler, die durch mehr Gläser inklusive - Gläser, die javac nicht sehen müssen, aber anscheinend scalac tut. Aber in diesem Fall weiß ich nicht, welche anderen Gläser ich hinzufügen kann.

+0

Möglicherweise verwandte ? https://issues.scala-lang.org/browse/SI-7002 – DaoWen

+0

Ich habe gerade ein paar andere Jar-Dateien ausprobiert - kein Glück. Scheint unwahrscheinlich, dass sie alle mit Eclipse kompiliert wurden. Ich werde sehen, ob ich die Quelle bekommen und manuell kompilieren kann. –

Antwort

4

RobNs Antwort ist richtig, aber ich dachte, ich würde mit meinen eigenen Erfahrungen eine etwas längere Antwort schreiben. Dies steht im Zusammenhang mit this question und Diskussionen zu Guava-Ausgaben und 1095, die von RobN erwähnt werden.

hatte ich das gleiche Problem für den Zugriff versucht

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

Eklipse behauptet das base64 Mitglied existiert nicht und Gradle den Fehler in der Frage produziert bauen:

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

Der Fehler verursacht wird, optional Abhängigkeit von einigen Anmerkungen in Guava's pom.xml. Wie in this answer erläutert, ignoriert der Java-Compiler Annotationen, für die die entsprechende Klassendatei nicht gefunden wird, aber der Scala-Compiler erfordert die Kompilierung der Definitionen.

Das explizite Hinzufügen der Abhängigkeit, die optional ist, sollte das Problem lösen.

In diesem speziellen Fall Guava's pom.xml hat folgende optionale Abhängigkeit und unten an einem Projekt der Abhängigkeits Erklärungen hinzugefügt wird das Problem lösen:

Gradle:

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> 
+0

Ich denke, das ist das gleiche wie meine Antwort von vor 5 Monaten, obwohl die Erklärung über Scala in dem Link enthalten ist. –

+2

@RobN Ja. Ich habe ziemlich viel gegoogelt, um hierher zu kommen. Ich habe den Beitrag ursprünglich im Link gefunden. Nachdem ich die richtigen Schlüsselwörter kennengelernt hatte, suchte ich erneut nach SO und fand diese Frage. Ich hoffe, dass das Ausarbeiten ein wenig und das Vernetzen der Fragen zukünftiger Entdecker Ergebnisse schneller finden wird. Ich bin mir nicht sicher, ob das ein guter Weg ist, SO weiter zu gehen ... –

+0

In meinem äquivalenten Fall ist der anfängliche Fehler: 'Fehler beim Laden von GoogleService, class file '..../lib/gdata-core-1.0 .jar (com/google/gdata/client/GoogleService.class) "ist kaputt". Das [Java-Paket] (https://code.google.com/p/gdata-java-client/source/checkout) hängt von Guava ab. Irgendwie schaffe ich es nicht, die Lösung mit sbt unter Verwendung von 'libraryDependencies + =" com.google.code.findbugs "%" jsr305 "%" 2.0.2 "zu reproduzieren, obwohl ich dieses jar bereits in meinem Klassenpfad ('/lib') hatte. an erster Stelle. Irgendwelche Ideen? – matanster