2013-05-08 10 views
7

Chciałbym, aby katalog roboczy arkusza Scala (i interpreter Scala) był ścieżką projektu Eclipse, a nie katalogiem instalacyjnym Eclipse. Jak mogę (nie programowo) to osiągnąć?Konfigurowanie katalogu roboczego arkusza roboczego Scala

Wiem, że mogę używać System.setProperty("user.dir", "..."), ale IMHO, które nie należą do kodu. Co więcej, nie wydaje się działać:

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

Oto niektóre problemy zarejestrowane w projekcie: [# 102] (https://github.com/scala-ide/scala-worksheet/issues/102), [# 156] (https://github.com/scala-ide/scala-worksheet/issues/156). – metasim

Odpowiedz

5

Od Scala Ćwiczenie 0.2.1 nie jest możliwe kontrolowanie katalog roboczy arkusza.

Ze względów bezpieczeństwa, po uruchomieniu maszyny JVM nie jest (bezpośrednio) możliwa bezpośrednia zmiana maszyny JVM. Aby uzyskać szczegółowe informacje, patrz Changing the current working directory in Java?.

Dlatego ogólnie dobrą praktyką jest zawsze określać w pełni kwalifikowane ścieżki lub określać względne ścieżki z w pełni kwalifikowanego "punktu kontrolnego".

Oto hack wpadłem na uzyskanie takiego „punkt zaczepienia” w Scala Arkusz

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

Zasadniczo działa korzystając z istnienia katalogu .worksheet/bin utworzony w katalogu projektu Eclipse i dołączone do ścieżki klasy Scala Worksheet.

Powiązane problemy