2013-05-08 32 views
7

Tôi muốn thư mục làm việc cho trang tính Scala (và trình thông dịch Scala) là đường dẫn dự án Eclipse chứ không phải thư mục cài đặt Eclipse. Làm thế nào tôi có thể (không lập trình) đạt được điều đó?Cấu hình thư mục làm việc của trang tính Scala

Tôi biết rằng tôi có thể sử dụng System.setProperty("user.dir", "..."), nhưng IMHO không thuộc mã. Hơn nữa, nó có vẻ không hoạt động:

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

Dưới đây là một số vấn đề được ghi lại đối với dự án: [# 102] (https://github.com/scala-ide/scala-worksheet/issues/102), [# 156] (https://github.com)/scala-ide/scala-worksheet/issues/156). – metasim

Trả lời

5

Kể từ bảng tính Scala 0.2.1 không thể kiểm soát thư mục làm việc của bảng tính.

Vì lý do bảo mật, khi JVM đang chạy, không thể trực tiếp thay đổi hoạt động của JVM. Xem Changing the current working directory in Java? để biết chi tiết.

Do đó, thực tiễn tốt là luôn luôn chỉ định đường dẫn đủ điều kiện hoặc chỉ định đường dẫn tương đối từ "điểm neo" đủ điều kiện.

Dưới đây là một hack tôi đã đưa ra để nhận như một "điểm neo" trong 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") 
} 

Về cơ bản nó hoạt động bằng cách tận dụng lợi thế của sự tồn tại của .worksheet/bin thư mục được tạo ra trong thư mục dự án Eclipse của bạn và thêm vào classpath của Scala Worksheet.

Các vấn đề liên quan