2013-05-08 55 views
7

我希望Scala工作表(和Scala解釋器)的工作目錄是Eclipse項目路徑而不是Eclipse安裝目錄。我如何(非編程)實現這一目標?配置Scala工作表的工作目錄

我知道我可以使用System.setProperty("user.dir", "..."),但恕我直言,不屬於代碼。此外,它似乎不工作:

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 /斯卡拉-IDE /斯卡拉 - 工作表/問題/ 156)。 – metasim 2014-02-16 14:01:53

回答

5

由於Scala的工作表0.2.1是不可能控制工作的工作目錄。

出於安全原因,一旦運行JVM,就不能(直接)直接更改JVM的工作。有關詳細信息,請參見Changing the current working directory in Java?

因此,總是指定完全限定的路徑或從完全限定的「錨點」指定相對路徑是一種很好的做法。

這是我想出了在斯卡拉工作表

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") 
} 

它主要的工作原理是採取在Eclipse項目目錄中創建的.worksheet/bin目錄的存在的優勢得到這樣的「錨點」黑客攻擊並附加到Scala Worksheet類路徑中。