Helidon Gradle项目shadowJar未包含依赖jar仅引入类报错如何解决
Helidon MP shadowJar打包异常解决方案
你遇到的WELD-001325报错本质是shadow插件默认将所有依赖解压为class文件合并时,多个依赖Jar中同名的CDI扩展SPI注册文件被覆盖,导致Weld无法识别到Helidon的服务扩展。
若要实现shadowJar打包时保留独立的依赖Jar包而非解压为类文件,可通过开启shadow插件的JarInJar模式实现,在build.gradle中添加如下配置:
shadowJar { // 开启Jar嵌套模式,所有依赖保留原Jar格式存入最终fat jar,不解压为class文件 jarInJar = true manifest { attributes( // 固定为shadow提供的嵌套Jar启动类 'Main-Class': 'com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar$JarInJarLauncher', // 替换为你自己项目的业务主类全限定名 'Start-Class': 'com.ananth.osef.Main' ) } }
配置完成后执行gradlew clean shadowJar重新构建即可,构建生成的fat jar可直接通过java -jar 构建产物名称.jar运行。
如果你接受将依赖解压合并的打包方式,仅需解决WELD报错,也可通过合并SPI服务文件的方式实现,配置如下:
shadowJar { // 合并所有依赖Jar的SPI服务注册文件,避免CDI扩展配置被覆盖 mergeServiceFiles() manifest { attributes 'Main-Class': 'com.ananth.osef.Main' } }
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

