Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在执行时在目录中加载JAR_Java - Fatal编程技术网

Java 如何在执行时在目录中加载JAR

Java 如何在执行时在目录中加载JAR,java,Java,(我的问题很短,请阅读粗体文本) 我目前正在编写一个音乐索引器,它监视文件夹中添加的任何文件,并在找到这些文件时对其进行解析 我的想法是为事件创建某种中介系统,让其他jar钩住这些事件(即:“pre_index”),并让它们的代码也执行(如果需要,还可能取消进一步的执行,即:当发生异常或错误时) 为了方便地向这个插件添加额外的功能,并且在发布时允许其他人轻松地为自己配置索引器所需的额外功能我想在执行主jar时从目录中加载任何额外的模块(jar) 从目前为止我在不同网站和一些stackoverfl

(我的问题很短,请阅读粗体文本)

我目前正在编写一个音乐索引器,它监视文件夹中添加的任何文件,并在找到这些文件时对其进行解析

我的想法是为事件创建某种中介系统,让其他jar钩住这些事件(即:“pre_index”),并让它们的代码也执行(如果需要,还可能取消进一步的执行,即:当发生异常或错误时)

为了方便地向这个插件添加额外的功能,并且在发布时允许其他人轻松地为自己配置索引器所需的额外功能我想在执行主jar时从目录中加载任何额外的模块(jar)

从目前为止我在不同网站和一些stackoverflow页面上读到的内容来看,这似乎真的很难做到,因为类加载器并不意味着会发生这种情况,主要因素是安全性

我从Bukkit(Minecraft服务器项目,已停产)中编写MOD中学到了我的大部分Java知识,他们已经使这个系统(看起来)运行良好


所以基本上我的问题是,Bukkit是如何做到这一点的,我如何复制类似的(或基本的)东西,而不会引起任何内存问题。

关注模块或包,而不是JAR。

代码组织是第一步。在完成之前,您不必担心如何组织和部署jar文件。因此,首先,关注这一点

在这种程度上,使用包并注意包级别的依赖关系。将代码分解为多个包是非常合适的。每个包都应该解决具有共同功能和主题的独特问题集。包应该始终具有单向依赖关系,以便可以在依赖关系树中组织它们。这是大型系统良好设计的基础

对于您的设计,拥有一个只处理文件夹监控的包听起来很棒。创建一个监视对象,该对象扫描文件夹,并在创建或更改文件时回调侦听器接口以发出通知。使用某种只记录文件更改的虚拟侦听器,自行包装并测试此包,以便可以测试此包

一旦有了这个包,您就可以像使用任何其他库一样使用它。用目标目录实例化监视器对象。使用处理程序实现侦听器接口,该处理程序将解析文件并提取适当的数据。将该侦听器添加到添加或更改文件时要调用的监视器对象

一旦完成并开始工作,您就可以担心如何部署它了。然后,如果愿意,可以将monitor包部署为自己的jar

在处理大型项目时,需要这样思考。使用依赖关系树将代码分解成包是第一步。这允许团队首先集中精力创建没有任何依赖关系的基本包。如果工作将同时在依赖于开发中的其他包的包上完成,那么这些开发人员将知道与谁协调哪些部分


在处理较小的项目时,这种方法仍然有助于保持代码的组织性和可重用性。

它并不能从字面上回答这个问题,但我很欣赏这些信息,因此会接受它作为答案,感谢您在命令行中包含一个jar,您只需将它添加到类路径中即可。我相信还有其他问题可以解决这个问题。