0

所以我正在 Eclipse 中编写一个 webapp,我想在我的一个类中使用服务加载器。问题是在哪里放置 META-INF/services 的东西。从这里(https://stackoverflow.com/a/3421191/2742995)我发现:

但理想的方法是将它放在插件的 jar 文件中。例如,如果您有一个捆绑为 WEB-INF/lib/myplugin.jar 的插件,并且您的插件类是 com.example.plugin.MyPlugin 那么 jar 应该有一个结构:

myplugin.jar!/META-INF/services/com.example.plugin.MyPlugin

所以我在包含 serviceloader 东西的模块中,来源: src/main/java/ 包含

  1. vcs.validation.*(包含源代码)
  2. 一个文件夹: META-INF/services/vcs.validation.javatests.JavaTest 包含:

    • Test1(读取 vcs.validation.javatests.Test1)和
    • Test2(读取 vcs.validation.javatests.Test2)

(接口vcs.validation.javatests.JavaTest有两个实现类Test1和Test2)

但是,当我将整个 webapp 打包为一个 war 并在 tomcat 中部署时,web-app/WEB-INF/classes/ 文件夹不包含任何 META-INF/services/。我在这里做错了什么?

4

1 回答 1

0

结构应该是:

Project
| Module
| | src 
|   | main 
|     | java 
|       | [ source code]      
|     | resources 
|       | META-INF 
|         | services 
|           | [service files] 

代替:

Project
| Module
| | src 
|   | main 
|     | java 
|       | [source code]
|       | META-INF 
|         | services 
|           | [service files] 

通过这种方式,服务文件不再分解为 webapp/WEB-INF/classes/META-INF/services,而只是存在于根据以下条件打包它们的 jar 中:

myplugin.jar!/META-INF/services/com.example.plugin.MyPlugin
于 2014-12-12T09:23:07.043 回答