Service Loader配置文件未正确爆炸

时间:2014-12-11 16:22:47

标签: eclipse maven tomcat serviceloader

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

  

但理想的方法是将它放在插件的jar文件中。如果你   有一个插件捆绑为WEB-INF / lib / myplugin.jar,以及你的插件   class是com.example.plugin.MyPlugin然后jar应该有一个   结构:

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

所以我在包含serviceloader的模块中有源:src / main / java / contains

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

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

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

1 个答案:

答案 0 :(得分: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