【问题标题】:shadowJar is not including dependent jars, instead including classes in my Helidon Gradle projectshadowJar 不包括依赖 jar,而是包括我的 Helidon Gradle 项目中的类
【发布时间】:2021-10-09 16:28:37
【问题描述】:

我有一个 Helidon MP 项目,并按照此处提供的步骤构建了一个胖罐

https://blogs.oracle.com/developers/post/migrating-a-helidon-se-application-to-gradle

gradlew shadowJar 成功构建,所有依赖项都提取为类,而不是按原样包含依赖项 jar。因此,我遇到了以下异常。

线程“主”org.jboss.weld.exceptions.IllegalArgumentException 中的异常:WELD-001325:没有在部署中注册的扩展类 io.helidon.microprofile.server.ServerCdiExtension 的实例 在 org.jboss.weld.manager.BeanManagerImpl.getExtension(BeanManagerImpl.java:1445) 在 org.jboss.weld.util.ForwardingBeanManager.getExtension(ForwardingBeanManager.java:239) 在 io.helidon.microprofile.server.Server$Builder.(Server.java:154) 在 io.helidon.microprofile.server.Server.builder(Server.java:91) 在 com.ananth.osef.Main.startServer(Main.java:28) 在 com.ananth.osef.Main.main(Main.java:23)

如何构建包含单个 jar 而不是提取的类的影子 jar?

我正在使用 gradle 5.6.3 和 shadow 5.2.0

【问题讨论】:

    标签: gradle helidon


    【解决方案1】:

    我不太了解 Gradle,也不了解 shadow,但是制作一个胖 jar 通常是一种不好的方法,因为正如您所发现的,有意义的资源文件可能会被合并、覆盖或省略(如无论您使用哪种构建工具,都可能在上面使用META-INF/beans.xml 资源发生。

    如果您的 Helidon SE 程序的目标是 Docker 和/或 Kubernetes,那么您最好遵循 one of Helidon's quickstart examples 中的部署策略,它利用了容器层,不会遇到您遇到的问题以上引用。

    如果这是一个shadow 问题(“我如何使用shadow 来制作一大罐罐子?”)我会让更有资格的人回答这个问题。

    【讨论】:

      【解决方案2】:

      扩展名在META-INF/services/... 下的文件中定义。阴影(或阴影)时的问题是,这些文件存在于不同的人工制品中,但最终的 jar 中只存在一个。要解决此问题,您必须合并文件。

      幸运的是,有一个方便的 Gradle Shadow 转换器可以做到这一点:https://imperceptiblethoughts.com/shadow/configuration/merging/#merging-service-descriptor-files

      shadowJar {
        mergeServiceFiles()
      }
      

      我在使用 Maven Shade 插件时遇到了同样的问题,并使用了这个资源转换器:https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ServicesResourceTransformer

      <transformers>
        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
      </transformers>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多