2013-05-08 23 views
7

Vorrei che la directory di lavoro per il foglio di lavoro Scala (e l'interprete di Scala) fosse il percorso del progetto Eclipse anziché la directory di installazione di Eclipse. Come posso (non programmaticamente) conseguirlo?Configurare la directory di lavoro del foglio di lavoro Scala

So che posso usare System.setProperty("user.dir", "..."), ma IMHO che non appartiene al codice. Inoltre, non sembra funzionare:

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

Di seguito sono riportati alcuni problemi relativi al progetto: [# 102] (https://github.com/scala-ide/scala-worksheet/issues/102), [# 156] (https://github.com)/scala-ide/scala-foglio/temi/156). – metasim

risposta

5

A partire dal foglio di lavoro Scala 0.2.1 non è possibile controllare la directory di lavoro foglio di lavoro.

Per motivi di sicurezza, una volta che una JVM è in esecuzione, non è (direttamente) possibile modificare direttamente le JVM. Vedi Changing the current working directory in Java? per i dettagli.

Pertanto, è generalmente buona norma specificare sempre percorsi completi o specificare percorsi relativi da un "punto di ancoraggio" completo.

Ecco un hack mi è venuta per ottenere un tale "punto di ancoraggio" della Scala foglio

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

Funziona praticamente sfruttando l'esistenza della .worksheet/bin directory creata nella directory del progetto di Eclipse e aggiunto al classpath del foglio di lavoro Scala.