2016-12-28 4 views
0

Ich benutze Maven 3.3 + Scala 2.10 für ein kleines Projekt. Das scalatest-Framework funktioniert einwandfrei. Allerdings, wenn ich zu scala 2.11 und ersetzen Sie alle Abhängigkeiten auf 2,11 wechseln:Scalatest wirft seltsamen Fehler auf Scala 2.11

<dependency> 
     <groupId>org.scalatest</groupId> 
     <artifactId>scalatest_2.11</artifactId> 
     <version>2.2.6</version> 
     <scope>test</scope> 
    </dependency> 

Das erste Mal, dass ich mvn Test lief es warf diesen Fehler:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 

Results : 

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 

[INFO] 
[INFO] --- scalatest-maven-plugin:1.0:test (test) @ spookystuff-core --- 
An exception or error caused a run to abort. This may have been caused by a problematic custom reporter. 
java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef; 
    at org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:2347) 
    at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1044) 
    at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1043) 
    at org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:2722) 
    at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1043) 
    at org.scalatest.tools.Runner$.main(Runner.scala:860) 
    at org.scalatest.tools.Runner.main(Runner.scala) 

Kann jemand erklären, was tut es bedeutet, und wie man es repariert?

+1

In Scala müssen alle Objekte mit derselben Scala-Version kompiliert werden, daher ist es wichtig, dass Sie die korrekte Version jeder Bibliothek verwenden. –

Antwort

-1

OK Ich habe das Problem gefunden. Doing a mvn dependency: tree zeigt, dass eine Bibliothek nicht mit scala 2.11 ausgeliefert wird, wenn das Kompilieren der Abhängigkeit noch in 2.10 aufgelöst wird.

Die Lösung ist die Abhängigkeit auszuschließen:

<dependency> 
     <groupId>com.github.mdr</groupId> 
     <artifactId>ascii-graphs_2.10</artifactId> 
     <version>0.0.6</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.scala-lang</groupId> 
       <artifactId>scala-library</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

Das wird alles normal.

+1

Die '_2.10' am Ende von' ascii-graphs_2.10' bedeutet, dass diese Abhängigkeit für Scala 2.10 –

+0

kompiliert wird Ich weiß, aber ich dachte naiv, dass es schattiert sein wird, so wie so viele latente jar hells – tribbloid

1

Wenn Sie Maven mit Scala verwenden, nicht schreiben scalatest_2.11; Verwenden Sie stattdessen so etwas wie

<properties> 
    <encoding>UTF-8</encoding> 
    <scala.binary.version>2.11</scala.binary.version> 
</properties> 
... 
    <artifactId>scalatest_${scala.binary.version}</artifactId> 

Andernfalls werden Sie regelmäßig auf solche Probleme stoßen.

+0

Danke viel Alex, genau das habe ich gemacht, aber eine Bibliothek, die ich benutzt habe, hat keine 2.11-Version, also benutze ich die 2.10-Version und obwohl sie in maven von 2.11 Abhängigkeiten schattiert wird, stellt sich heraus, dass der Schatten nicht so funktioniert:) – tribbloid

+0

Es ist weniger "Schatten funktioniert nicht so" und mehr Scala funktioniert nicht so. –

Verwandte Themen