我正在尝试用Scala脚本替换一堆Linux shell脚本。
剩下的挑战之一是如何扫描整个JAR目录并将它们放入类路径中。目前,这是在调用scala JVM之前在shell脚本中完成的。我想彻底消除shell脚本。
这有一个优雅的scala成语吗?
我发现了另一个问题但是在Java中似乎很难搞清楚它: How do you change the CLASSPATH within Java?
答案 0 :(得分:6)
JVM本身在类路径中支持通配符表示法。如果/foo/bar
是一个包含JAR文件的目录,所有这些文件都要包含在类路径中,则可以在类路径中包含/foo/bar/*
,而不是单独枚举每个JAR文件。
我不确定这对您的目的是否足够,但在适合的时候它很方便。
答案 1 :(得分:2)
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/*