Shadow jar 缺少常见的 java 类

Posted

技术标签:

【中文标题】Shadow jar 缺少常见的 java 类【英文标题】:Shadow jar missing common java classes 【发布时间】:2021-02-17 18:44:58 【问题描述】:

我正在打包我的应用程序的影子罐子。该应用程序使用 kotlin 和一些外部依赖项。所有依赖项都在我的 jar 中,但在运行时出现以下异常:

java.lang.NoSuchMethodError: java.util.Optional.isEmpty()Z

最后的 Z 总是在那里;我不知道它来自哪里。

我检查了多个 build.gradle 文件示例,我的似乎不错。

buildscript 
    repositories 
        jcenter()
    
    dependencies 
        classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0'
    


plugins 
    id 'org.jetbrains.kotlin.jvm' version '1.3.72'
    id 'com.github.johnrengelman.shadow' version '6.1.0'


group 'com.bancarelvalentin'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'kotlin'
apply plugin: 'java'


repositories 
    mavenCentral()


dependencies 
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "com.discord4j:discord4j-core:3.1.0"
    implementation "com.natpryce:konfig:1.6.10.0"
    implementation "org.json:json:20200518"
    implementation "ch.qos.logback:logback-classic:1.2.3"
    implementation "org.slf4j:slf4j-api:1.7.30"



shadowJar 
    archiveBaseName.set('DreamBot')
    archiveClassifier.set('')
    archiveVersion.set('0.0.0')
    mergeServiceFiles()
    manifest 
        attributes 'Main-Class': 'com.bancarelvalentin.dreambot.Main'
    

我无法确定确切的问题是我的 java 安装工作不正常还是我的 jar 缺少东西?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您的运行时 Java 版本低于编译时 Java 版本

Optional.isEmpty() 来自 JDK 11+,它不在 JDK 8,9 中

build.gradle 没问题。

只需使用 JDK 11 运行

【讨论】:

以上是关于Shadow jar 缺少常见的 java 类的主要内容,如果未能解决你的问题,请参考以下文章

CGLib缺少jar出现 java.lang.ClassNotFoundException: org.objectweb.asm.Type

如何使用gradle任务运行shadow jar?

如何通过bat或sh脚本执行jar

在导入JAVA项目缺少JAR包,但是代码里面没有错误提示?如何解决

spring + maven +testng 测试常见依赖包问题

Java axis2.jar包详解及缺少jar包错误分析