V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Trumeet
V2EX  ›  Kotlin

V2 大佬们帮我解决个 Kotlin 问题呗(

  •  
  •   Trumeet · 2019-01-05 05:10:00 +08:00 · 6673 次点击
    这是一个创建于 2154 天前的主题,其中的信息可能已经有所发展或是发生改变。
    13 条回复    2019-01-05 15:48:33 +08:00
    sagaxu
        1
    sagaxu  
       2019-01-05 09:02:53 +08:00 via Android
    Make sure you have kotlin-reflect.jar in the classpath.
    Trumeet
        2
    Trumeet  
    OP
       2019-01-05 10:11:20 +08:00 via Android
    @sagaxu 没有仔细看提问的吗,已经加入了,只有生成的 JAR 会报这个(
    nicevar
        3
    nicevar  
       2019-01-05 10:49:07 +08:00
    不是别没有仔细看问题,是你不理解,你生成的 jar 没有包含相应的类,只是依赖,当然报这个错了,你在 ide 里面运行的时候 ide 知道去找这个 jar。想确定问题的原因很简单,用 jd-gui 看一下生成的 jar 文件就知道了
    sagaxu
        4
    sagaxu  
       2019-01-05 10:50:54 +08:00 via Android
    @Trumeet 运行的时候没加入
    Trumeet
        5
    Trumeet  
    OP
       2019-01-05 11:03:34 +08:00
    @nicevar 解压简单看了下,包含 kotlin reflect 相关类(如 KClass )。而且其它依赖都包含了
    Trumeet
        6
    Trumeet  
    OP
       2019-01-05 11:03:55 +08:00
    @sagaxu IDE 运行好好的啊.. JAR 运行还要做特殊处理?
    nicevar
        7
    nicevar  
       2019-01-05 11:08:35 +08:00
    @Trumeet 除非你手动处理了或者用了 fatjar 之类的,否则是不可能将依赖的 jar 打包到你的 jar 中去的,你为什么老说那句 IDE 运行的好好的,跟你说了 IDE 运行的时候知道依赖 jar 的位置,运行的时候就会去加载。
    Trumeet
        8
    Trumeet  
    OP
       2019-01-05 11:12:44 +08:00
    @nicevar 目前是这么打包的:

    ![build.gradle]( https://i.loli.net/2019/01/05/5c30201a7a96e.jpg)

    JAR 中 `/kotlin/reflect`:

    ![JAR content]( https://i.loli.net/2019/01/05/5c30208a82ffb.jpg)
    nicevar
        9
    nicevar  
       2019-01-05 11:29:01 +08:00
    @Trumeet 你这截图 jar 中类明显不对,你去对比一下 kotlin-reflect.jar ,应该是有个 jvm 和 full 的路径
    Trumeet
        10
    Trumeet  
    OP
       2019-01-05 11:30:48 +08:00
    @nicevar 感谢提醒,我去看一下(
    Trumeet
        11
    Trumeet  
    OP
       2019-01-05 11:33:14 +08:00
    @nicevar 非常感谢,刚刚看了一下确实没有.... 不过应该是加入了呀.. 如何把它塞到 JAR 内呢.. ShadowJar 是不资瓷 Gradle 5.1 的((
    sagaxu
        12
    sagaxu  
       2019-01-05 12:37:00 +08:00 via Android
    @Trumeet 做 fatjar 的时候,不建议解压 jar 再打包,就算打对了包,有些场景下也会出错,比如多个 jar 有相同名字和路径的文件,解压后会相互覆盖。你可以用 application 打 tar 包或者 zip 包。或者把 shadowjar 或者 springboot 里的 classloader 抠出来自己打 fatjar。
    SoloCompany
        13
    SoloCompany  
       2019-01-05 15:48:33 +08:00
    转换 kotlin 到 java 为啥需要用到 kotlin-reflect?

    一般情况下完全不需要使用到 KClass 的反射支持吧, 你问题中提到的特性都完全和 kotlin-reflect 无关
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3478 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:50 · PVG 18:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.