2015-01-17 8 views
10

Jestem w stanie skompilować programy scala za pomocą skalaca w terminalu, ale otrzymuję ostrzeżenie.Można skompilować programy Scala, ale nie można ich uruchomić

Charless-Macintosh:src Charles$ scalac hello.scala 
Charless-Macintosh:src Charles$ scala HelloWorld 
No such file or class on classpath: HelloWorld 

Czy ma to związek z .profile na scala. Jestem bardzo zdezorientowany co do tego, co się dzieje. Wielkie dzięki

Odpowiedz

21

Bieżący katalog zwykle nie znajduje się w ścieżce klas. Więc trzeba dać wyraźnie:

$ scala -cp . HelloWorld 
+0

Dziękuję bardzo. – Mark

+0

Myślę, że to jest specyficzne dla Mac'a? Ścieżka clas zdecydowanie zawiera bieżący katalog pod Linuksem. Czy jest coś innego na temat skryptu powłoki Maca? (Czy Java sama robi to inaczej?) –

+0

To zależy od konfiguracji Java. Wierzę, że czasami zawiera go domyślnie, czasami nie. – sjrd

3

Problemem jest to, że masz ustawić zmienną środowiskową z CLASSPATH.

Od > man scalac:

Domyślna ścieżka klasy jest katalog bieżący. Ustawienie zmiennej CLASSPATH lub użycie opcji wiersza polecenia -classpath przesłania tę wartość domyślną, , więc jeśli chcesz uwzględnić katalog bieżący w ścieżce wyszukiwania, musisz dołączyć "." w nowych ustawieniach.

Kiedy masz zmienną zestaw CLASSPATH, scala nie będzie zawierać aktualny katalog w jego poszukiwaniu, trzeba jawnie dodać go. Dlatego działa scala -cp . HelloWorld.

Aby zweryfikować, wykonaj echo CLASSPATH i powinien on podać niepusty ciąg. Sprawdź swoje pliki .bashrc/.zshrc pod kątem dowolnego export CLASSPATH=... i usuń te linie.

0

To również mi się przydarzyło, ale myślę, że lepszym rozwiązaniem jest zmodyfikowanie zmiennej CLASSPATH w celu włączenia bieżącego katalogu oprócz tego, co już posiadałeś. na przykład

export CLASSPATH=.:$CLASSPATH

Teraz możesz po prostu użyć scala HelloWorld bez tego dodatkowego argumentu.