0

私はScalaを始めたばかりで、困惑する問題に遭遇しましたが、簡単なものが欠けていると思います.

私はClapper ClassFinder を使用するための指示に従っていました。

val classpath = List("./plugins").map(new File(_))
val finder = ClassFinder(classpath)
val classes = finder.getClasses
val classMap = ClassFinder.classInfoMap(classes)

最初の行を実行した後、クラスパスが単純に List(.\plugins) に設定されていることがわかります。これを Windows で実行しているので、スラッシュの交換は問題ないようです。しかし、File オブジェクトのリストが表示されることを期待していましたが、この Scala 構文については確信が持てず、おそらく Scala IDE に何かが欠けている可能性があります。クラスの値は「空のイテレータ」を示しています。

指定したパスにファイルが見つからないようです。絶対パスを使用してみましたが、同じ結果が得られました。plugins ディレクトリに 1 つの jar ファイルがあり、それが見つかることを望んでいます。plugins ディレクトリは、私が使用している Play2 プロジェクトのルートにあります。

編集 --- 1 つの jar へのパスを明示的にリストすると、それを見つけることができることがわかりました。

val classpath = List("./plugins/myPlugin.jar").map(new File(_))

しかし、ディレクトリ内のすべてのjarファイルを見つけたいです。以下は機能しませんでした:

val classpath = List("./plugins/*").map(new File(_))

これもしませんでした:

val classpath = List("./plugins/*.jar").map(new File(_))
4

2 に答える 2

1

Github の ClassFinder リポジトリに関するこの問題から判断すると、バグである可能性があります。

jar ファイルの明示的なリストを作成するか、フォルダーに含まれているファイルを次のようにリストする必要があると思います。

val classpath =(new File("./plugins")).listFiles.filter(_.getName.endsWith(".jar"))

編集: GitHub の ClassFinder のソースをざっと見たところ、バグではないと思います。ClassFinder は、.class ファイルを jar ファイルまたは zip ファイル内、またはフォルダー内で直接検索しますが、これらのものを再帰的に混合していないように見えます (つまり、フォルダーを指定すると、フォルダー内のクラスを直接検索しますが、検索しません)。フォルダー内の jar 内のクラスを探します)

于 2012-12-01T10:34:59.570 に答える
1

すべての jar ファイルを一覧表示することが目的の場合は、次のコードを使用できます。

val classpath = List("./plugins").map(path => Option(new File(path).listFiles).getOrElse(Array.empty[java.io.File]) filter(file => file.isFile && file.getName.endsWith(".jar"))).flatten
于 2012-12-01T06:04:58.107 に答える