首页 文章

$ class.getResource从maven shade插件包装的胖jar失败了

提问于
浏览
0

我的java / scala程序需要javescript代码片段的支持 . 所以我把它放在我的资源文件夹中:

resources
|- sizzle.js

并在我的pom.xml中明确地将它包含在由maven shade插件编译的fat / uber jar中:

<transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                            <resource>resources</resource>
                            <file>sizzle.js</file>
                        </transformer>
                    </transformers>

(我知道这是不必要的,但无论哪种方式都会让我失望)

当我尝试从源代码中读取javascript片段时:

sizzleSource = IOUtils.toString(Thread.currentThread().getContextClassLoader().getResource("sizzle.js"));

它在IDE中运行时效果很好,但在执行fat jar时我得到空指针异常:

...
java.lang.NullPointerException
at org.apache.commons.io.IOUtils.toString(IOUtils.java:894)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:879)
...

那么为什么maven shade插件会在这种情况下失败?我能够在胖 jar 的根目录中看到sizzle.js,但它没有什么区别 .

1 回答

  • 0

    文件 sizzle.js 最终位于最终jar的根目录,因此您需要通过以下方式访问它:

    Thread.currentThread().getContextClassLoader().getResource("/sizzle.js"));
    

    方法ClassLoader.getResource(name)需要绝对路径来查找资源 .

相关问题