2013-09-03 17 views
7

Próbuję wywołać biblioteki Selenium Java ze Scala. Używam Scala IDE (Eclipse) i Scala 2.10.2. Co powoduje błąd tego kompilatora?Błąd Scala: plik klasy jest uszkodzony, zły stały indeks puli

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) 

Czasami naprawić uszkodzone błędów pliku klasy, włączając kolejne słoiki słoiki że javac - nie trzeba zobaczyć, ale widocznie scalac robi. Ale czy w tym przypadku nie wiem, jakie inne słoiki mogę dodać.

+0

prawdopodobnie związane ? https://issues.scala-lang.org/browse/SI-7002 – DaoWen

+0

Właśnie wypróbowałem kilka innych plików jar - bez powodzenia. Wydaje się mało prawdopodobne, że wszystkie zostały skompilowane z Eclipse. Zobaczę, czy mogę pobrać źródło i ręcznie skompilować. –

Odpowiedz

4

Odpowiedź RobN jest poprawna, ale pomyślałem, że napiszę nieco dłuższą odpowiedź z własnymi doświadczeniami. Jest to związane z this question i dyskusji na temat problemów Guawa 776 i 1095 wymienionych przez RobN.

miałem ten sam problem podczas próby dostępu

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

Eclipse twierdzi członek base64 nie istnieje i Gradle budować produkuje błąd w pytaniu:

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

Błąd jest spowodowany przez opcjonalnie zależność od niektórych adnotacji w Guava's pom.xml. Jak wyjaśniono w artykule this answer, kompilator Java ignoruje adnotacje , dla których nie znaleziono odpowiedniego pliku klasy, ale kompilator Scala wymaga kompilacji.

Jawnie dodanie zależności opcjonalnej powinno rozwiązać problem.

W tym konkretnym przypadku Guava's pom.xml ma następujące opcjonalne zależność i dodanie deklaracji zależnościami poniżej do projektu rozwiąże problem:

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

Myślę, że to jest to samo, co moja odpowiedź sprzed 5 miesięcy, chociaż wyjaśnienie dotyczące Scali znajduje się w linku. –

+2

@RobN Tak. Zrobiłem sporo wyszukiwania, żeby się tu dostać. Początkowo znalazłem post w linku. Po poznaniu właściwych słów kluczowych ponownie wyszukałem SO i znalazłem to pytanie. Mam nadzieję, że opracuję trochę i usieciowię pytania przyszłych odkrywców szybciej. Nie jestem pewien, czy jest to dobry sposób postępowania na SO, ale ... –

+0

W moim odpowiedniku przypadku początkowy błąd to: "błąd podczas ładowania GoogleService, plik klasy" ..../lib/gdata-core-1.0 .jar (com/google/gdata/client/GoogleService.class) "jest uszkodzony". To [pakiet java] (https://code.google.com/p/gdata-java-client/source/checkout) zależy od Guava. Jakoś nie uda mi się odtworzyć rozwiązania za pomocą sbt, używając 'libraryDependencies + =" com.google.code.findbugs "%" jsr305 "%" 2.0.2 "' chociaż już miałem ten słoik w mojej ścieżce klasy ('/ lib') na pierwszym miejscu. Jakieś pomysły? – matanster

Powiązane problemy