simple-robot / simpler-robot

Simple Robot,一个bot风格的Kotlin多平台事件调度框架,异步高效、Java友好!/ A Bot-style Kotlin Multiplatform event scheduling framework, asynchronous and high-performance, java-friendly! 🐱😼😻😸
https://simbot.forte.love
GNU Lesser General Public License v3.0
520 stars 43 forks source link

[QU.] 打包后启动报错 #173

Closed o174110 closed 3 years ago

o174110 commented 3 years ago

version: `` 当前版本2.2.1

module: ``

疑问描述

您好,我下载了您GitHub上的原生demo,想布置到腾讯云函数上,在打成jar包后部署运行时抛出错误不知如何解决,本地运行无异常。 云函数异常信息如下: [INFO ] | love.simbot.example.SimbotExampleApplication : Active resources: [simbot.yml]

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at bootstrap.main(bootstrap.java:246)

Caused by: love.forte.common.ioc.exception.NoSuchDependException: interface love.forte.simbot.bot.BotManager

at love.forte.common.ioc.DependCenter.get(DependCenter.kt:945)

at love.forte.simbot.core.SimbotApp.createSimbotContext(SimbotApp.kt:411)

at love.forte.simbot.core.SimbotApp.run$core(SimbotApp.kt:250)

at scfinternal.EventHandlerLoader$BaseMethodRequestHandler.handlerRequest(EventHandlerLoader.java:240)

Caused by: love.forte.common.ioc.exception.NoSuchDependException: interface love.forte.simbot.bot.BotManager

at love.forte.common.ioc.DependCenter.get(DependCenter.kt:945)

at love.forte.simbot.core.SimbotApp.run$core(SimbotApp.kt:250)

at love.forte.simbot.core.SimbotApp$Run.run$default(SimbotApp.kt:434)

at love.forte.simbot.core.SimbotApp.run(SimbotApp.kt)

at love.simbot.example.SimbotExampleApplication.mainHandler(SimbotExampleApplication.java:34)

ForteScarlet commented 3 years ago

你是怎么打包的?你应该使用Springboot打包插件,不论是否使用了springboot环境

o174110 commented 3 years ago

我一开始是使用文档里面说明的Springboot打包,但是部署运行后报错好像是找不到里面引用jar包具体错误也看不太懂,现在就用idea自带的build artifacts打成jar包

ForteScarlet commented 3 years ago

用idea自帶build,那么你可能需要将所有的依赖jar全部分离为独立文件放在mainJar的同级目录,而不能是fastJar。 否则你需要使用Springboot打包插件。

o174110 commented 3 years ago

刚刚又试了一下mvn package 部署抛出错误 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at scfinternal.EventHandlerLoader$BaseMethodRequestHandler.handlerRequest(EventHandlerLoader.java:230)

at bootstrap.eventInvoke(bootstrap.java:168)

Caused by: java.lang.NoClassDefFoundError: love/forte/simbot/core/SimbotApp

at love.simbot.example.SimbotExampleApplication.mainHandler(SimbotExampleApplication.java:35)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 8 more

java.lang.reflect.InvocationTargetException

at scfinternal.EventHandlerLoader$BaseMethodRequestHandler.handlerRequest(EventHandlerLoader.java:240)

Caused by: java.lang.NoClassDefFoundError: love/forte/simbot/core/SimbotApp

at love.simbot.example.SimbotExampleApplication.mainHandler(SimbotExampleApplication.java:35)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Caused by: java.lang.ClassNotFoundException: love.forte.simbot.core.SimbotApp

ERROR RequestId:159a01c8-04f1-433f-a356-7db91e8f1059 Result:{"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"java.lang.reflect.InvocationTargetException","statusCode":430} 我只是个小菜鸟 开发经验不足 跟您请教一下

o174110 commented 3 years ago

这是用mvn package 打的jar包运行的 云函数只抛出了这么一点异常代码

ForteScarlet commented 3 years ago

提供你完整的pom,以及项目树结构。截图也可以

o174110 commented 3 years ago

image image 基本上代码上没有修改,想着部署成功了再继续写其他业务,idea爆红,但是实际是可以运行成功的

ForteScarlet commented 3 years ago

你并没有 love/forte/simbot/core/SimbotApp 这个类。但是你打包的时候很有可能指定的main class是这个类,改成你真正的main 所在类。

o174110 commented 3 years ago

image 云函数部署的时候指定执行方法是mainHandler 项目中确实没有这个类 这个类不是引用jar中的嘛

ForteScarlet commented 3 years ago

oh, 确实。那说明你打包的时候依赖缺失了,并没有把相关依赖打进去。检查打包出来的jar文件中的内容。以及,用springboot打包插件打包。

o174110 commented 3 years ago

image 根据您的建议,打包重新部署后 云函数无法找到SimbotExampleApplication不知您对这个是否了解,有解决的意见嘛 ERROR RequestId:35928202-cf6b-48a8-bee4-1d176e35aa22 Result:{"errorCode":-1,"errorMessage":"java.lang.ClassNotFoundException: love.simbot.example.SimbotExampleApplication","statusCode":443}

END RequestId:35928202-cf6b-48a8-bee4-1d176e35aa22

Report RequestId:35928202-cf6b-48a8-bee4-1d176e35aa22 Duration:0ms Memory:128MB MemUsage:0.000000MB

ForteScarlet commented 3 years ago

提供打包插件的配置信息

o174110 commented 3 years ago

image 您好 是这个么

ForteScarlet commented 3 years ago

你可以先在本地测试打包后的jar。正常来讲,被指定的mainClass不应该会消失。

o174110 commented 3 years ago

您好,本地对jar执行没有问题,方法正常调用了 image

ForteScarlet commented 3 years ago

既然都是同一个Jar文件,本地可以,云服务器就应该可以。

o174110 commented 3 years ago

不知道是什么原因 用idea自带的打成jar就不会出现找不到这个类,能启动,但是会有前面跟您说的那种报错信息,用springboot打包就会找不到类,本地测试都可以通过的 查看jar包目录也可以看见SimbotExampleApplication类 image image

ForteScarlet commented 3 years ago

既然本地不会报错,那么就说明Jar没有问题,毕竟都是同一个文件。那么很有可能是你使用的这个函数管理工具或者其他方面的因素导致的,自行排查一下吧。

o174110 commented 3 years ago

好的麻烦您了,非常抱歉占用您的休息时间,万分感谢您的耐心帮助。