在Scala脚本中自行修改类路径?

时间:2010-03-21 17:11:58

标签: linux scala shell

我正在尝试用Scala脚本替换一堆Linux shell脚本。

剩下的挑战之一是如何扫描整个JAR目录并将它们放入类路径中。目前,这是在调用scala JVM之前在shell脚本中完成的。我想彻底消除shell脚本。

这有一个优雅的scala成语吗?

我发现了另一个问题但是在Java中似乎很难搞清楚它: How do you change the CLASSPATH within Java?

3 个答案:

答案 0 :(得分:6)

JVM本身在类路径中支持通配符表示法。如果/foo/bar是一个包含JAR文件的目录,所有这些文件都要包含在类路径中,则可以在类路径中包含/foo/bar/*,而不是单独枚举每个JAR文件。

我不确定这对您的目的是否足够,但在适合的时候它很方便。

答案 1 :(得分:2)

嗯,这是直接支持的,你甚至不需要java支持。你试过吗?

scala -cp '/foo/bar/*'

答案 2 :(得分:0)

此脚本以递归方式浏览lib目录:

import java.io.File
import java.util.regex.Pattern

def cp(root: File, lib: File): String = {
  var s = lib.getAbsolutePath.replaceFirst(
    Pattern.quote(root.getAbsolutePath) + File.separator + "*", "") +
    File.separator + "*"
  for (f <- lib.listFiles; if f.isDirectory)
    s += File.pathSeparator + cp(root, f)
  s
}

例如:

/project
   lib
   |__dep
   |__dep2
     |__dep3

你打电话:

var f = new File("/path/to/project")
cp(f, f)

结果:

/*:lib/*:lib/dep2/*:lib/dep2/dep3/*:lib/dep/*