【发布时间】:2015-04-22 15:59:36
【问题描述】:
我的 java/scala 程序需要 javescript 代码 sn-p 的支持。所以我把它放在我的资源文件夹中:
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 sn-p 时:
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 插件会失败呢?我可以在 fat jar 的根目录中看到 sizzle.js,但这并没有什么不同。
【问题讨论】:
-
SomeFatJarClass.getResource("/sizzle.js")使用Class.getResource,带有相对路径,或此处为显式绝对路径。如果这样可行,那就是 ClassLoader 问题。
标签: java scala maven maven-shade-plugin