随着 JDA 4.2.0 的新更新,VPS 上新构建的 JAR 文件返回 NoClassDefFoundError
Posted
技术标签:
【中文标题】随着 JDA 4.2.0 的新更新,VPS 上新构建的 JAR 文件返回 NoClassDefFoundError【英文标题】:With the new update of JDA 4.2.0 the new built JAR file on the VPS returns NoClassDefFoundError 【发布时间】:2020-12-05 03:32:40 【问题描述】:随着JDA 4.2.0 的新更新,尝试在 VPS 上运行 jar 文件失败。 我尝试了各种选择,例如
creating a fat jar 搜索其他类似问题 source 1 source 2但这些选项似乎都不起作用,因为 VPS 控制台输出保持不变:
Error: Could not find or load main class ...
Caused by: java.lang.NoClassDefFoundError: net/dv8tion/jda/api/hooks/ListenerAdapter
所以我现在的问题是,我的gradle.build
应该是什么样子,或者这是 VPS 没有正确刷新的问题?或者可能是另一个我不知道的问题。
至于我的gradle.build
长什么样子:
buildscript
repositories
jcenter()
dependencies
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'
group '...'
version '2.0-SNAPSHOT'
repositories
mavenCentral()
jcenter(
)
dependencies
testCompile group: 'junit', name: 'junit', version: '4.+'
compile 'net.dv8tion:JDA:4.2.0_168'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'
compile group: 'javax.persistence', name: 'persistence-api', version: '1.0'
compile 'com.vdurmont:emoji-java:5.1.1'
jar
manifest
attributes(
'Main-Class': '...'
)
注意:在1.0-SNAPSHOT
的上一个快照中,以下gradle.build
工作于启动项目:
plugins
id 'java'
id 'application'
group '...'
version '1.0-SNAPSHOT'
repositories
mavenCentral()
jcenter()
dependencies
testCompile group: 'junit', name: 'junit', version: '4.+'
compile 'net.dv8tion:JDA:3.5.0_329'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'
compile group: 'javax.persistence', name: 'persistence-api', version: '1.0'
compile 'com.vdurmont:emoji-java:5.1.1'
【问题讨论】:
【参考方案1】:您可以使用这个build.gradle
来构建一个工作影子罐子:
plugins
id 'application' // this allows you to set a mainClassName
id 'com.github.johnrengelman.shadow' version '6.0.0' // this adds the shadowJar task
group '...'
version '2.0-SNAPSHOT'
mainClassName = 'your main class goes here' // this sets the main class property in your manifest automatically
repositories
jcenter() // jcenter is a superset of mavenCentral
dependencies
testCompile group: 'junit', name: 'junit', version: '4.+'
compile 'net.dv8tion:JDA:4.2.0_191'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'
compile group: 'javax.persistence', name: 'persistence-api', version: '1.0'
compile 'com.vdurmont:emoji-java:5.1.1'
运行shadowJar
gradle 任务来编译你的jar 文件。然后它将被放置在build/libs
中,格式为[name]-all.jar
。不要忘记将 mainClassName
替换为您的主类的完全限定名称。
【讨论】:
您好 Minn,我尝试了您的方法,但我不完全理解“运行 shadowJar gradle 任务以编译您的 jar 文件”的意思。因为我不熟悉 shadowJar。 想通了,就像一个魅力! :D 感谢您的帮助!以上是关于随着 JDA 4.2.0 的新更新,VPS 上新构建的 JAR 文件返回 NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章