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

发布于 2024-11-17 00:45:01 字数 266 浏览 2 评论 0原文

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

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

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

有什么想法吗?

I've got an XML file that I need to read from the classpath in order to load some test data for my project with DBUnit when running a custom runTask in SBT.

The XML file is located in /src/main/resources and is copied properly to the /target/scala_2.8.1/classes during the build, but I get a MalformedURLException when trying to access it.

The weird thing is, I can access the file when this data loading functionality was part of my Scala specs unit tests.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

¢好甜 2024-11-24 00:45:01

就我而言,问题是我在早期初始化程序中使用了 getClass.getResourceAsStream() 。必须使用 Class.forName() 显式指定类来解决此问题:Class.forName().getResourceAsStream("/data.xml")

In my case the problem was that I used getClass.getResourceAsStream() in early initialiser. Had to specify the class explicitly with Class.forName() to solve it: Class.forName(<class name>).getResourceAsStream("/data.xml")

温折酒 2024-11-24 00:45:01

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

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
}

If the error is saying that the URL is malformed, it's probably true.
Here's a code I use to grab file from resource during test:

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文