mamoe / mirai

高效率 QQ 机器人支持库
https://mirai.mamoe.net
GNU Affero General Public License v3.0
14.34k stars 2.53k forks source link

gradle 7.6, mirai-console-gradle 用 fileTree 的 jar 依赖没有打包进去 #2478

Open Nambers opened 1 year ago

Nambers commented 1 year ago

问题描述

部分 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

cssxsh commented 1 year ago

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

Karlatemp commented 1 year ago

提供 gradle buildPlugin --info 的日志

Karlatemp commented 1 year ago

你也没把你shadowLink 的依赖用 implementation 引用啊

cssxsh commented 1 year ago

你也没把你 shadowLink 的依赖用 implementation 引用啊

@Karlatemp 他这里是误用 shadowLink 了, 他把 shadowLink 对应到 implementation(fileTree 了

Nambers commented 1 year ago

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
Karlatemp commented 1 year ago

fileTree不是用于目录的吗,你确定 gradle 把你这个 jar 添加进入 external libraries 里了?

Nambers commented 1 year ago

fileTree不是用于目录的吗,你确定 gradle 把你这个 jar 添加进入 external libraries 里了?

他可以展开虽然不在external Libraries 里面 image 然后我的test里用他的类也没问题

MrY-Cat commented 8 months ago

今天更新了本地libs(不是本地Maven,仅仅是libs文件夹在IDEA设置为项目库并在build.gradle中implementation)的一个jar包的版本,IDEA测试的时候好好的,输出jar包用mcl运行找不到类,但是以前是好的,问半天发现以前只在Test用到了这个包,Main没用,这次用了,合着一直都没打包进去,后来知道了原来mirai不会把这种打进jar,知道了这个issue,特来插眼(

MrY-Cat commented 1 month ago

image image

好像还是不能将本地库打包进去,需要添加task才可以: image