将 ServiceLoader 配置文件放置在 Web 应用程序中的位置
我正在 Eclipse 中编写一个 Web 应用程序。
我正在尝试使用 ServiceLoader 类来加载一些插件。
ServiceLoader 的文档说我需要在 META-INF/services 中放置一个文件。
我已将该文件放置在 WebContent/META-INF/service 文件夹中,但是当我通过 Eclipse 运行 JUnit 测试时,它没有找到任何插件。
这是文件的正确位置吗?
另外,如何从 ServiceLoader 获取更多调试信息,例如它正在其中搜索文件的文件夹?
I am writing a web app in Eclipse.
I am trying to use the ServiceLoader class to load some plugins.
The docs for ServiceLoader say I need to place a file in META-INF/services.
I have placed the file in the WebContent/META-INF/service folder but when I run the JUnit test via Eclipse it does not find any plugins.
Is this the correct location for the file?
Also, how can I get more debug info from ServiceLoader such as the folders it is searching for the file in?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
META-INF/services 应该位于用于定位插件的类加载器的类路径中的 jar 文件或资源目录的根目录。
如果您有一个 Web 应用程序,那么您可以具有如下目录结构:
但理想的方法是将其放在插件的 jar 文件中。例如,如果您有一个捆绑为
WEB-INF/lib/myplugin.jar
的插件,并且您的插件类是com.example.plugin.MyPlugin
那么 jar 应该有一个结构:完成此操作后,您可以使用 Web 应用程序的类加载器获取服务加载器
The META-INF/services should be at the root of the jar file or resource directory in the classpath of the classloader used to locate plugins.
If you have a web application, then you can have directory structure like:
But the ideal way is to have it in your plugin's jar file. E.g if you have a plugin bundled as
WEB-INF/lib/myplugin.jar
, and your plugin class iscom.example.plugin.MyPlugin
Then the jar should have a structure:Having done that, you can get a service loader using your web application's class loader