Maven:将shaded-jar加载为库以分离项目

时间:2014-10-14 13:25:03

标签: java maven jar

我尝试解决问题,我在此topic

中发布了该问题

使用this解决方案

我尝试使用Maven的'shaded-plugin'创建一个带阴影的jar。但是我一直坚持将这个带阴影的jar加载到另一个项目的问题。这个'jar'是一个不可执行的库,用于使用some ...我只是将这个jar添加到单独项目中的外部库(使用IDEA),一切看起来都很好,直到我运行应用程序。

它抛出' ClassNotFoundException:Test '(测试 - 这是我在这个项目中唯一的一个类,它有main方法)。我想提一下,当我使用'assembly plugin'并使jar-with-dependencies一切正常时,没有任何例外。

我错过了什么?

完整的堆栈跟踪:

Exception in thread "main" java.lang.ClassNotFoundException: Test
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:259)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:116)

2 个答案:

答案 0 :(得分:1)

我想我以前遇到过你的问题。我甚至写了一篇关于它的博客文章:

https://ath3nd.wordpress.com/2013/12/25/packaging-a-multimodule-maven-spring-app-in-a-standalone-jar/

基本上,shaded-jar插件重写了这么多并且连接得如此之多以至于类路径和文件都与弹簧相关或显示全部进入了一个巨大的黑盒子而我最终得到了一个阴影jar,它不时抛出ClassNotFound异常。这就是我使用这个人的建议的原因:

Invalid or corrupt JAR File built by Maven shade plugin

并使用了3个插件的组合 - > maven依赖插件,maven jar插件和maven组件插件。通过这三者的组合,您可以实现与阴影插件相同的功能,但在幕后发生的魔法更少,或者至少我更容易理解发生的事情。您可以尝试使用它们,或者您可以发布部分配置,以便我们可以进一步帮助您。

不幸的是,使用Java中的ClassLoaders是一个相当讨厌和不愉快的事情,所以我祝你好运。

答案 1 :(得分:1)

谢谢大家!

我已经解决了我的问题。在我的情况下 - everithyng工作正常,当我将这些行添加到' shade-plugin' “pom'中的配置文件:

...
<configuration>
     ...
        <filters>
           <filter>
               <artifact>*:*</artifact>
                    <excludes>
                         <exclude>META-INF/*.SF</exclude>
                         <exclude>META-INF/*.DSA</exclude>
                         <exclude>META-INF/*.RSA</exclude>
                    </excludes>
           </filter>
        </filters>
...
</configuration>
...