代码之家  ›  专栏  ›  技术社区  ›  jonderry

在sbt中运行主类或测试时无法获取资源

  •  2
  • jonderry  · 技术社区  · 7 年前

    ClassLoader.getSystemResourceAsStream(...) ,这意外地导致 null ResourceList 答案中给出的示例 this question ,这证实了该文件和其他许多文件在运行时是不可访问的。

    这些资源不包含在 resources sbt通常使用的目录;它们包含在jar文件中,jar文件包含在 lib 目录我的项目中由sbt构建的源代码在很大程度上依赖于这个jar,并且编译是成功的,因此问题似乎是特定于资源的。我注意到的一件事是,如果我使用 ClassLoader 对象和调用 getResourceAsStream 而不是使用静态方法 ClassLoader.getSystemResourceAsStream

    有人知道如何解决这个问题吗(除了从jar文件中复制所有资源之外) )?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mario Galic    7 年前

    尝试在中运行测试 forked JVM :

    Test / fork := true
    

    Unmanaged dependencies 在里面 lib/ 默认情况下,应该在所有类路径上结束,包括 test ,无需做任何特殊的事情:

    lib 在所有类路径上(对于 compile , , run console ).

    Use sbt 复选框 Edit Configurations...

    getClass.getResourceAsStream ,正如这句话所用 系统 ClassLoader fallback :

         public InputStream getResourceAsStream(String name) {
            name = resolveName(name);
            ClassLoader cl = getClassLoader0();
            if (cl==null) {
                // A system class.
                return ClassLoader.getSystemResourceAsStream(name);
            }
            return cl.getResourceAsStream(name);
        }
    
    推荐文章