gradle 7.6, mirai-console-gradle 用 fileTree 的 jar 依赖没有打包进去
问题描述
部分 build.gradle.kts
dependencies{
implementation(fileTree("libs/abcl.jar"))
testImplementation(kotlin("test"))
"shadowLink"("org.armedbear:lisp")
}
abcl.jar MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.10.12
Created-By: 1.8.0_201-b09 (Oracle Corporation)
Main-Class: org.armedbear.lisp.Main
Name: org/armedbear/lisp
Implementation-Title: ABCL
Implementation-Version: 1.9.0
Implementation-Build: Mon May 23 2022 08:54:21 CEST
run Mirai Console gradle task 的日志
2023-02-08 23:51:18 I/main: Backend: version 2.14.0, built on 2023-02-06 01:25:21.
2023-02-08 23:51:18 I/main: Frontend Terminal: version 2.14.0, provided by Mamoe Technologies
2023-02-08 23:51:18 I/main: Welcome to visit https://mirai.mamoe.net/
2023-02-08 23:51:20 E/main: Failed to init MiraiConsole.
net.mamoe.mirai.console.internal.util.ServiceLoadException: Could not load service tech.eritquearcus.MiraiLisp.
at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:60)
at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadAllServices(PluginServiceHelper.kt:42)
at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:197)
at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:192)
at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:314)
at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:316)
at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:787)
at kotlin.sequences.SequencesKt___SequencesKt.toSet(_Sequences.kt:828)
at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.extractPlugins(BuiltInJvmPluginLoaderImpl.kt:218)
at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.listPlugins(BuiltInJvmPluginLoaderImpl.kt:67)
at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.listPlugins(JvmPluginLoader.kt)
at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.listAndSortAllPlugins(PluginManagerImpl.kt:195)
at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.findAndSortAllPluginsUsingBuiltInLoaders(PluginManagerImpl.kt:141)
at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.loadAllPluginsUsingBuiltInLoaders$mirai_console(PluginManagerImpl.kt:151)
at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:290)
at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:496)
at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:177)
at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:176)
at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:54)
Caused by: java.lang.NoClassDefFoundError: org/armedbear/lisp/Interpreter
at MiraiLisp-dev.mirai2.jar//tech.eritquearcus.MiraiLisp.<clinit>(MiraiLisp.kt:29)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:468)
at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:51)
... 23 more
Caused by: java.lang.ClassNotFoundException: org.armedbear.lisp.Interpreter
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.loadClass(JvmPluginClassLoader.kt:440)
... 27 more
BUILD SUCCESSFUL in 8s
7 actionable tasks: 2 executed, 5 up-to-date
23:51:21: Execution finished ':runConsole'.
复现
Nope
mirai-core 版本
2.14.0
bot-protocol
ANDROID_PHONE
其他组件版本
No response
系统日志
No response
网络日志
No response
补充信息
No response
https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/plugin/JVMPlugin.md#%E6%8F%92%E4%BB%B6%E4%BE%9D%E8%B5%96%E6%89%93%E5%8C%85%E6%9C%BA%E5%88%B6
提供 gradle buildPlugin --info 的日志
你也没把你shadowLink 的依赖用 implementation 引用啊
你也没把你 shadowLink 的依赖用 implementation 引用啊
@Karlatemp 他这里是误用 shadowLink 了, 他把 shadowLink 对应到 implementation(fileTree 了
https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/plugin/JVMPlugin.md#%E6%8F%92%E4%BB%B6%E4%BE%9D%E8%B5%96%E6%89%93%E5%8C%85%E6%9C%BA%E5%88%B6
我就是看这个的,里面说用本地jar的打包理论上会直接打包进去,但是我还是no class found,所以我就试了下shadowlink 看有没有用
提供
gradle buildPlugin --info的日志
> Task :miraiPrepareMetadata
Caching disabled for task ':miraiPrepareMetadata' because:
Caching has not been enabled for the task
Task ':miraiPrepareMetadata' is not up-to-date because:
Task has not declared any outputs despite executing actions.
resolving : org.jetbrains.kotlin:kotlin-stdlib-jdk8
linkedDependencies: [org.jetbrains.kotlin:kotlin-stdlib-jdk8, net.mamoe:mirai-core-api, net.mamoe:mirai-core-api-jvm, net.mamoe:mirai-core-api-android, net.mamoe:mirai-core, net.mamoe:mirai-core-jvm, net.mamoe:mirai-core-android, net.mamoe:mirai-core-utils, net.mamoe:mirai-core-utils-jvm, net.mamoe:mirai-core-utils-android, net.mamoe:mirai-console, net.mamoe:mirai-console-terminal, org.jetbrains.kotlin:kotlin-stdlib-jdk7, org.jetbrains.kotlin:kotlin-stdlib, org.jetbrains.kotlin:kotlin-stdlib-common, org.jetbrains:annotations]
linkToAPi : [org.jetbrains.kotlin:kotlin-stdlib-jdk8]
api : [org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0, org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0, org.jetbrains.kotlin:kotlin-stdlib:1.8.0, org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0, org.jetbrains:annotations:13.0]
runtime : [org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0, org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0, org.jetbrains.kotlin:kotlin-stdlib:1.8.0, org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0, org.jetbrains:annotations:13.0]
subprojects : []
subprojects_linked: []
Resolve mutations for :buildPlugin (Thread[Execution worker,5,main]) started.
producer locations for task group 0 (Thread[Execution worker Thread 6,5,main]) started.
:buildPlugin (Thread[Execution worker Thread 3,5,main]) started.
> Task :buildPlugin UP-TO-DATE
Caching disabled for task ':buildPlugin' because:
Caching has not been enabled for the task
Skipping task ':buildPlugin' as it is up-to-date.
BUILD SUCCESSFUL in 355ms
fileTree不是用于目录的吗,你确定 gradle 把你这个 jar 添加进入 external libraries 里了?
fileTree不是用于目录的吗,你确定 gradle 把你这个 jar 添加进入 external libraries 里了?
他可以展开虽然不在external Libraries 里面
然后我的test里用他的类也没问题
今天更新了本地libs(不是本地Maven,仅仅是libs文件夹在IDEA设置为项目库并在build.gradle中implementation)的一个jar包的版本,IDEA测试的时候好好的,输出jar包用mcl运行找不到类,但是以前是好的,问半天发现以前只在Test用到了这个包,Main没用,这次用了,合着一直都没打包进去,后来知道了原来mirai不会把这种打进jar,知道了这个issue,特来插眼(
好像还是不能将本地库打包进去,需要添加task才可以: