Самостоятельно изменить путь к классу в скрипте Scala? - PullRequest
3 голосов
/ 21 марта 2010

Я пытаюсь заменить кучу сценариев оболочки Linux скриптами Scala.

Одна из оставшихся проблем состоит в том, как просканировать весь каталог JAR и поместить их в путь к классам. В настоящее время это делается в сценарии оболочки до вызова scala JVM. Я хотел бы полностью удалить скрипт оболочки.

Есть ли для этого элегантная идиома скала?

Я нашел другой вопрос, но в Java вряд ли стоит с ним связываться: Как изменить CLASSPATH в Java?

Ответы [ 3 ]

6 голосов
/ 21 марта 2010

JVM сама поддерживает символ подстановки в пути к классам. Если /foo/bar является каталогом, содержащим файлы JAR, все из которых вы хотите включить в путь к классам, вы можете включить /foo/bar/* в путь к классам вместо перечисления каждого файла JAR по отдельности.

Я не уверен, что этого будет достаточно для ваших целей, но это удобно, когда подходит.

2 голосов
/ 23 марта 2010

Хм, это напрямую поддерживается, вам даже не нужна поддержка Java.Вы пробовали это?

scala -cp '/foo/bar/*'
0 голосов
/ 22 января 2012

Этот скрипт рекурсивно просматривает lib dir:

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/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...