tale
tale copied to clipboard
Tale插件加载方式存在问题
我现在写了一个插件,这个插件会依赖于某个第三方的jar包,在打包的时候我没有将这个第三方jar包打包进插件里,我希望保持插件的干净。然后我将依赖的第三方jar包放在lib路径下面,结果在加载插件的时候报错了:java.lang.NoClassDefFoundError
所以针对这种问题有什么好的解决方案?在加载插件的时候可不可以再去lib目录查找依赖jar呢?还是说必须把额外的依赖jar打包到插件中来?
抱大腿
otale/plugin_qiniu@95191f1 你可以类似这样干
嗯,这个我知道,但是这样打包的话实在是太不优雅 我先要实现的效果是: 插件单独打成一个jar包,插件依赖的jar单独处理,将额外依赖的jar放在tale项目的lib目录下面,加载插件的时候也能将插件的依赖从lib目录中读取出来 但是我这样做之后,实际项目的运行情况是: tale运行的时候会加载lib下面的jar包,但是没有依赖的jar不会加载,当加载插件的时候,因为插件的依赖也是放在lib目录下面,但是这些jar没有加载进去,而插件的classloader也不会再去lib目录下面寻找依赖jar,只会读取plugin目录下面的jar
目前的解决方法是将插件依赖的jar一起放在plugin文件夹下面 但是这样做太丑了
所以tale有没有可能在内部解决这个问题?
目前还没有,插件的目的是即插即用,如果装载插件还需要编译拉取插件所需的包是对本地项目的破坏,而且生产环境中没有mvn去拉取和管理依赖包
目前还没有,插件的目的是即插即用,如果装载插件还需要编译拉取插件所需的包是对本地项目的破坏,而且生产环境中没有mvn去拉取和管理依赖包
我并不是说编译还要拉取插件所需要的包,我是说运行时加载插件的包
好吧,是我的理解出现了偏差。
但是我还是不明白为什么要把他们分开,因为你的包依赖的第三方包从模块来说也许只是和你的插件有关系,应该和插件是一个整体而且是不可分割的一部分,缺少它插件就无法运行。
那么把他们分开的原因是什么,而且这样还会增加安装和卸载难度。
好吧,是我的理解出现了偏差。
但是我还是不明白为什么要把他们分开,因为你的包依赖的第三方包从模块来说也许只是和你的插件有关系,应该和插件是一个整体而且是不可分割的一部分,缺少它插件就无法运行。
那么把他们分开的原因是什么,而且这样还会增加安装和卸载难度。
应该是强迫症吧,我觉得这样项目结构看起来干净些,而且发布也更方便轻量
我曾经也试过你说的方法,但是这种方法有些问题 1:打包后,依赖的第三方jar的class会和插件里面的class混合到一起 2: jar-with-dependencies那难看的后缀名,暂时还不知道怎么自定义这个后缀