0

我刚从 Scala 开始,遇到了一个让我很难过的问题,但我猜我错过了一些简单的东西。

我按照说明使用 Clapper ClassFinder: http ://thoughts.inphina.com/2011/09/15/building-a-plugin-based-architecture-in-scala/

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 中遗漏了一些东西。类的值显示一个“空迭代器”。

在我指定的路径中似乎没有找到任何文件。我尝试使用绝对路径,但结果相同。我希望它会在插件目录中找到一个 jar 文件。plugins 目录位于我正在使用的 Play2 项目的根目录中。

编辑---我确实发现,当我明确列出一个罐子的路径时,它能够找到它:

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

如果您的目标是列出所有 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 回答
1

从 Github 上的 ClassFinder repo 上的这个问题来看,这可能是一个错误。

我认为您需要创建一个明确的 jar 文件列表或列出文件夹中包含的文件,例如:

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

编辑:粗略浏览一下GitHub 上 ClassFinder 的源代码,我认为这不是错误。ClassFinder 在 jars 或 zip 文件中或直接在文件夹中搜索 .class 文件,但看起来它不会递归地混合这些东西(即,如果你给它一个文件夹,它会直接在文件夹中查找类,但它不会在文件夹中的 jars 中查找类)

于 2012-12-01T10:34:59.570 回答