aragakiyuii
V2EX  ›  Java

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

  •  
  •   aragakiyuii · Jun 12, 2020 · 1719 views
    This topic created in 2228 days ago, the information mentioned may be changed or developed.

    工程里引入了某个射频机器的包,可以通过提供的 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 嘛?

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   989 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
    ♥ Do have faith in what you're doing.