我想用Scala腳本替換一堆Linux shell腳本。在Scala腳本中自修改類路徑?
剩下的挑戰之一是如何掃描整個JAR目錄並將它們放入類路徑中。目前這是在調用scala JVM之前在shell腳本中完成的。我想完全消除shell腳本。
有沒有一個優雅的斯卡拉成語呢?
我發現這個問題,其他的但在Java似乎根本沒有值得惹它: How do you change the CLASSPATH within Java?
我想用Scala腳本替換一堆Linux shell腳本。在Scala腳本中自修改類路徑?
剩下的挑戰之一是如何掃描整個JAR目錄並將它們放入類路徑中。目前這是在調用scala JVM之前在shell腳本中完成的。我想完全消除shell腳本。
有沒有一個優雅的斯卡拉成語呢?
我發現這個問題,其他的但在Java似乎根本沒有值得惹它: How do you change the CLASSPATH within Java?
JVM本身支持在類路徑外卡符號。如果/foo/bar
是一個包含JAR文件的目錄,您希望將其全部放在類路徑中,則可以在類路徑中包含/foo/bar/*
而不是逐個枚舉每個JAR文件。
我不確定這是否足以滿足您的需要,但在適用時非常方便。
恩,這是直接支持,你甚至不需要java的支持。你試過了嗎?
scala -cp '/foo/bar/*'
這個腳本的瀏覽DIR 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
您致電:
結果:
/*:lib/*:lib/dep2/*:lib/dep2/dep3/*:lib/dep/*
但是,這隻在JDK 1.6中實現 – Andrey 2010-03-21 19:15:04
我們歡迎您在現在。 – 2010-03-21 19:17:30