Настроить рабочий каталог рабочего листа Scala

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

Я знаю, что могу использовать 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
}

person gzm0    schedule 08.05.2013    source источник
comment
Вот некоторые проблемы, зарегистрированные в проекте: #102, #156.   -  person metasim    schedule 16.02.2014


Ответы (1)


Начиная с Scala Worksheet 0.2.1 невозможно управлять рабочим каталогом рабочего листа.

Из соображений безопасности после запуска JVM невозможно (напрямую) изменить работу JVM напрямую. Подробнее см. в разделе Изменение текущего рабочего каталога в Java?.

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

Вот хак, который я придумал для получения такой «точки привязки» в рабочем листе Scala.

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.

person metasim    schedule 16.02.2014