【问题标题】:Maven: loading the shaded-jar as library to separate projectMaven:将 shaded-jar 作为库加载到单独的项目中
【发布时间】:2014-12-09 07:37:59
【问题描述】:

我尝试解决问题,我已在此 topic 中发布了该问题

this解决方案

我尝试使用来自 Maven 的“阴影插件”创建一个阴影罐。但是我遇到了将这个带阴影的 jar 加载到另一个项目的问题。这个“jar”是一个不可执行的库,用于使用 somewere...我只是将这个 jar 添加到单独项目中的外部库中(使用 IDEA),在我运行应用程序之前一切看起来都很好。

它抛出 'ClassNotFoundException: Test'(测试 - 是我在这个项目中唯一的一个类,它有 main 方法)。我想提一下,当我使用“程序集插件”并制作 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)

【问题讨论】:

  • 如何在构建中包含阴影 jar? Neo4j 在 Maven 中心有标准(非阴影)jar。一般来说,如果 jar-with-dependencies jar 目标适合你,我真的会避免使用 shaded 插件。
  • jar-with-dependencies 不能正常工作。在使用 db 的这个 jar 'web-interface' 的单独项目中根本不起作用(因为重写 META-INF/service 文件 - 我在 maven 依赖项中有几个 neo4j 组件),但非 web 功能有效。我使用阴影插件连接 META-INF/service 中的实现。但这可能会导致混乱和我的项目迷恋......

标签: java maven jar


【解决方案1】:

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

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

基本上,shaded-jar 插件重写了很多并且连接了很多,以至于与 spring 相关或清单的类路径和文件都进入了一个巨大的黑匣子,我最终得到了一个 shaded jar,它不时抛出 ClassNotFound 异常.这就是为什么我使用了这个人的建议:

Invalid or corrupt JAR File built by Maven shade plugin

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

不幸的是,在 Java 中使用 ClassLoader 是一件相当讨厌和不愉快的事情,所以无论如何我祝你好运。

【讨论】:

    【解决方案2】:

    谢谢大家!

    我已经解决了我的问题。就我而言 - 当我将此行添加到 'pom' 文件中的 'shade-plugin' 配置中时,everithyng 工作正常:

    ...
    <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>
    ...
    

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 2013-05-11
      • 2014-04-07
      • 1970-01-01
      • 2016-06-04
      • 2012-07-28
      • 2014-02-05
      • 2019-12-23
      • 1970-01-01
      相关资源
      最近更新 更多