2011-06-15 9 views
5

Kiedy rozpocząć rEPL na Windows 7 64-bit (działa ok na moim laptopie Windows XP) pojawia się następujący komunikat:udało się utworzonego JLineReader (Scala REPL)

Failed to created JLineReader: java.lang.NoClassDefFoundError: Could not initial 
ize class org.fusesource.jansi.internal.Kernel32 
Falling back to SimpleReader. 

Oznacza to historia i kod zakończenie nie działa.

Mam googleed problem, ale nie mogę znaleźć żadnego rozwiązania. Nie mam zainstalowanego sbt, Maven ani bluszcza, więc nie sądzę, że ma to coś wspólnego z tymi. Mój% SCALA_HOME% jest poprawnie skonfigurowany.

Jest coś na temat zależności od Scala 2.8 w tym wątku: http://www.scala-lang.org/node/9855, ale nie rozumiem, jak rozwiązać ten problem w moim systemie.

Zgodnie z sugestiami w tym temacie: http://www.scala-lang.org/node/9795 Zaktualizowałem moje biblioteki MS C++, ale nadal mam problem. Uruchomiłem kod sugerowany w poście 11 i otrzymuję:

scala> println(System.getProperty("java.library.path")) 

C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\ 
Windows;C:\Program Files\Common Files\Microsoft Shared\Windows Live;c:\Program F 
iles (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Win 
dows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files 
(x86)\QuickTime\QTSystem\;C:\Program Files (x86)\ZipGenius 6\;C:\Program Files (
x86)\Java\jdk1.6.0_22\bin;C:\Program Files\SlikSvn\bin\;C:\Program Files\apache- 
ant-1.8.2\bin;C:\Program Files\TortoiseSVN\bin;C:\cygwin\bin;C:\Program Files (x 
86)\Notepad++;C:\Program Files (x86)\groovy-1.7.10\bin;C:\Program Files\scala2.9 
\bin 

scala> println(org.fusesource.jansi.internal.WindowsSupport.getConsoleMode) 

java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi. 
internal.Kernel32 
     at org.fusesource.jansi.internal.WindowsSupport.getConsoleMode(WindowsSu 
pport.java:48) 
     at .<init>(<console>:8) 
     at .<clinit>(<console>) 
     at .<init>(<console>:11) 
     at .<clinit>(<console>) 
     at $export(<console>) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:592) 

     at scala.tools.nsc.interpreter.IMain$Request$$anonfun$10.apply(IMain.sca 
la:828) 
     at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:4 
3) 
     at scala.tools.nsc.io.package$$anon$2.run(package.scala:31) 
     at java.lang.Thread.run(Unknown Source) 

Każda pomoc w uzyskaniu tego do pracy doceniona!

+0

Jak zainstalować Scala –

+0

@Daniel normalny sposób z instalatorem Izpack –

+0

mmmmm Spróbuj zainstalować za pomocą instalatora Typesafe za:. Wydaje się być mądrzejszy niż izpack –

Odpowiedz

4

EDYCJA: Rozwiązanie było typu del %TEMP%\jansi.dll - patrz komentarz huynhjl poniżej z powodu.


Wygląda na to, że REPL jest niezgodny z 64-bitowym środowiskiem JRE. Zmieniono zmienną środowiskową JAVA_HOME w Zaawansowane ustawienia systemu, aby korzystać z wersji 32-bitowej, tj. Z C:\Program Files\Java\jre6 do C:\Program Files (x86)\Java\jdk1.6.0_22.

Potem musiał skorygować błąd (to jest nadal) w pliku scala.bat zmieniając linię 24 z

if exist "%JAVA_HOME%\bin\java.exe" set _JAVACMD=%JAVA_HOME%\bin\java.exe 

do

if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe" 

i teraz działa OK.

java z linii poleceń jest wystarczająco inteligentny, aby korzystać z 64-bitowego środowiska wykonawczego bez względu na swoją ścieżkę lub java_home zmiennych, ale scala wykorzystuje cokolwiek określić w JAVA_HOME (który faktycznie jest chyba tak powinno być). Ale środowisko wykonawcze 64-bitowe jest dużo szybsze niż środowisko 32-bitowe, więc chciałbym go użyć.

W tej chwili wygląda na to, że mam do wyboru w pełni funkcjonalny REPL i działający na 64-bitowej maszynie JVM. :(

+12

Mam teorię, ale nie jestem w. front mojej instalacji Win64, aby ją zweryfikować Istnieją dwa 'jansi.dll' dołączone do' jline.jar', jeden do 32 bitów i jeden do 64 bitów.Obierany jest wybierany na podstawie wartości 'sun. Właściwość systemowa arch.data.model' (32 lub 64) .Po rozpakowaniu dll nie jest odświeżana na podstawie znacznika czasu, więc domyślam się, że najpierw uruchomiłeś 32-bitową wersję, która rozpakowała 32-bitową bibliotekę DLL. JVM, 'jansi.dll' jest niekompatybilny, więc spróbuj' del% TEMP% \ jansi.dll', a następnie uruchom swoją scalę na 64 bitach, aby sprawdzić, czy to zadziała – huynhjl

+0

@huynhjl To zadziałało! Tyvm –

+2

Mam submi podjąłem następujący problem w trackerze problemów: https://issues.scala-lang.org/browse/SI-4703 – huynhjl