2014-08-27 1 views
1

Я настраиваю Scala на свою машину Windows и пытаюсь запустить ее из Cygwin. Я могу запустить REPL и выполнять команды, но когда я попытался предварительно загрузить файл (-i) мне сказали, что файл не существует:Доступ к путям Cygwin от Scala REPL

$ scala -i /home/username/preload.scala 
That file does not exist 

Welcome to Scala version 2.11.2 (Java HotSpot(TM) Client VM, Java 1.7.0_02). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> 

Теперь файл существует в терминал:

$ [ -f /home/username/preload.scala ] && echo EXISTS 
EXISTS 

Но Scala не может его найти. Оказывается, Scala использует корневой каталог с Windows, а не Cygwin-х:

scala> Files.newDirectoryStream(Paths.get("/")).asScala.foreach{println} 
\$Recycle.Bin 
\cygwin 
\Documents and Settings 
\Drivers 
\Program Files 
\Program Files (x86) 
\ProgramData 
\Recovery 
\System Volume Information 
\Users 
\Windows 

Но теперь я на немного потери. Как я могу сказать Scala REPL использовать пути Cygwin или, наоборот, как я могу настроить Cygwin для правильного запуска Scala?

ответ

0

Вы не можете.

Некоторое преобразование cygwin выполняется в сценарии запуска, для classpaths, но не содержит аргументов файла.

Рассмотрите файл scala file.scala и scala pkg.Часто как неоднозначный.

Редактировать: возможно, это стоит запрос функции, так как помимо обработки -i вы можете попытаться обнаружить пути к файлам для преобразования (косые черты и двоеточия).

(Это же условие из простого Java, конечно.)

+0

Wow, я думаю, мне никогда не приходилось сталкиваться с абсолютными путями с Java (например, 'javac/tmp/Test.java' не работает). – dimo414

0

Это, к сожалению, ожидаемое поведение, как подробно описано на Using Cygwin effectively странице: программы

Windows, не понимают POSIX имен путей , поэтому любые аргументы, которые ссылаются на файловую систему, должны быть в формате Windows (или DOS) или переведены.

cygpath утилита может быть использована для работы вокруг этого вопроса в некоторых случаях, но это не будет работать внутри Scala РЕПЛ, и требует обработки среды Cygwin явно иначе сценариев кросс-платформенных.