2013-05-08 4 views
7

Я бы хотел, чтобы рабочий каталог для листа Scala (и интерпретатор Scala) был проектом Eclipse, а не каталогом Eclipse. Как я могу (не программно) достичь этого?Настроить рабочий каталог листа Scala

Я знаю, что могу использовать System.setProperty("user.dir", "..."), но IMHO, который не входит в код. Кроме того, это не похоже на работу:

object ScratchWS { 
    System.setProperty("user.dir", "C:\\")   //> res0: String = C:\adt-bundle-windows-x86_64-20130219\eclipse 
    new File("putty.exe").exists()     //> res1: Boolean = false 

    new File("C:\\putty.exe").exists()    //> res2: Boolean = true 
} 
+0

Ниже перечислены некоторые проблемы, связанные с проектом: [# 102] (https://github.com/scala-ide/scala-worksheet/issues/102), [# 156] (https://github.com/Scala-ида/Scala-лист/вопросы/156). – metasim

ответ

5

На Scala Worksheet 0.2.1 не удается контролировать рабочий каталог рабочего листа.

По соображениям безопасности, как только JVM работает, нет возможности напрямую изменять работу JVM. См. Changing the current working directory in Java?.

Таким образом, как правило, рекомендуется всегда указывать полностью определенные пути или указывать относительные пути из полностью «привязанной точки».

Вот хак я придумал для получения такой «точки привязки» в Scala Worksheet

object WorksheetProjectDirHack { 
    // Yuck.... See: https://github.com/scala-ide/scala-worksheet/issues/102 
    import Properties._ 
    val pathSep = propOrElse("path.separator", ":") 
    val fileSep = propOrElse("file.separator", "/") 
    val projectDir = javaClassPath.split(pathSep). 
     filter(_.matches(".*worksheet.bin$")).head. 
     split(fileSep).dropRight(2).mkString(fileSep) 

    val otherProjectFile = new File(projectDir, "src/main/resources/data.bin") 
} 

Это в основном работает за счет использования в существовании .worksheet/bin каталога, созданного в каталоге проекта Eclipse, и добавляется к пути класса Scala Worksheet.

Смежные вопросы