我的java / scala程序需要javescript代码片段的支持。所以我把它放在我的资源文件夹中:
resources
|- sizzle.js
在我的pom.xml中明确地将它包含在由maven shade plugin编译的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插件会在这种情况下失败?我能够在胖罐的根目录中看到sizzle.js,但它没有什么区别。
答案 0 :(得分:0)
文件sizzle.js
最终位于最终jar的根目录,因此您需要通过以下方式访问它:
Thread.currentThread().getContextClassLoader().getResource("/sizzle.js"));
方法ClassLoader.getResource(name)
需要绝对路径来查找资源。