配置Scala工作表的工作目录

2024-06-20

我希望 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
}

从 Scala Worksheet 0.2.1 开始,无法控制工作表工作目录。

出于安全原因,一旦 JVM 运行,就不可能(直接)直接更改 JVM 的工作方式。看更改 Java 中的当前工作目录? https://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-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 类路径的目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置Scala工作表的工作目录 的相关文章

随机推荐