如何在运行SBT runTask时访问资源?

时间:2011-06-26 18:25:55

标签: scala resources classpath sbt

我有一个XML文件需要从类路径中读取,以便在SBT中运行自定义runTask时使用DBUnit为我的项目加载一些测试数据。

XML文件位于/ src / main / resources中,并在构建期间正确复制到/target/scala_2.8.1/classes,但在尝试访问时遇到MalformedURLException。

奇怪的是,当这个数据加载功能是我的Scala规范单元测试的一部分时,我可以访问该文件。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在我的情况下,问题是我在早期初始化器中使用了getClass.getResourceAsStream()。必须使用Class.forName()明确指定类来解决它:Class.forName(<class name>).getResourceAsStream("/data.xml")

答案 1 :(得分:0)

如果错误表明网址格式错误,则可能是真的。 这是我用来在测试期间从资源中获取文件的代码:

def copyFileFromResource(source: String, dest: File) {
  val in = getClass.getResourceAsStream(source)
  val reader = new java.io.BufferedReader(new java.io.InputStreamReader(in))
  val out = new java.io.PrintWriter(new java.io.FileWriter(dest))
  var line: String = null
  line = reader.readLine
  while (line != null) {
    out.println(line)
    line = reader.readLine
  }
  in.close
  out.flush
}