我查看了这里和更广泛的网络以找到解决方案。有相关材料,但我一直找不到关于我的具体问题的任何有用信息。
我正在开发一些需要接受插件的 Java 软件。我不想使用像 OSGi 这样的花哨的框架,而 ServiceLoader 似乎提供了正确级别的支持。我基本上已经让它工作了,但是类路径有问题。我的目录结构如下:
progfolder
|___________ plugintest.jar
|___________/plugins
|________ plugin1.jar
|________ plugin2.jar
如果我运行 plugintest.jar ,java -jar plugintest.jar
那么即使我将 ./plugins/ (或它的变体)添加到清单中的 Class-Path: ,它也找不到插件。阅读表明这仅适用于类,而不适用于 jar,因此我尝试将两个插件中的类plugins
直接放在目录的完整路径中,但没有成功。
-cp plugins/*
如果我使用该-jar
选项,则不允许添加插件文件夹以将其添加到类路径中。为了解决这个问题,我可以运行 usingjava -cp plugintest.jar;plugins/* com.plugin.test.Main
并且按预期工作 - 这两个插件可以通过代码检测和访问,但是命令行有点笨拙,尽管我可以忍受它,如果它是最好的选择的话。
我找到了另一个解决方案,我为 中找到的 jar 创建了一个类加载器plugins
,它适用于这个简单的案例,但阅读表明我可能会在更复杂的应用程序中遇到安全问题。
有没有办法解决问题,这样我就可以简单地运行而java -jar plugintest.jar
无需自己加载类,或者这就是它的方式?