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

关于 idea 启动和 jar 启动 classloader 加载顺序的问题

  •  
  •   aragakiyuii · 2020-06-12 10:47:40 +08:00 · 1301 次点击
    这是一个创建于 1437 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工程里引入了某个射频机器的包,可以通过提供的 tcp 或者 serial 方式进行连接。serial 方式依赖于 RXTXcomm 这个包,但是它把这个依赖放到自己的 jar 中了(疑惑

    springboot 打成 fat jar 之后大致是这样的

    BOOT-INF
      -classes
      -lib
        -xxx.jar
          -lib
            -RXTXcomm.jar
    

    tcp 方式

    public class Reader {
    	
        //这个里面没有用到 RXTXcomm 中的类
        public static boolean tcpConnect() {
            return doSomething();
        }
    }
    

    serial 方式

    public class Reader {
    	
        //这个里面使用了 RXTXcomm 中某些类
        public static boolean serialConnect() {
    	return doSomething();
        }
    }
    

    我采用了 tcp 方式,通过 idea 启动没什么问题。可是打包成 jar 包启动时就会抛异常

    ClassNotFoundException: gnu.io.SerialPortEventListener

    我调用的静态方法没有用到SerialPortEventListener这个类,并且 Reader 这个类里定义的全局变量中也没有用到SerialPortEventListener,为什么 idea 启动时不会加载而通过 jar 的方式启动会去加载呢? classloader 不是等到使用到某个类的时候才会去 findClass 嘛?

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   860 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:51 · PVG 03:51 · LAX 12:51 · JFK 15:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.