java模块:提供。。。使用don';在webapp中不起作用
我正在做一个基于Java模块的项目。我有一个父项目(pom项目),它包含其他模块、war模块和一些jar模块。 我想知道一个模块是一个提供者,所以我在一个模块中定义了一个提供者类,它将在另一个模块中使用。 在webapplication的应用程序启动期间,定义如下:java模块:提供。。。使用don';在webapp中不起作用,java,module,Java,Module,我正在做一个基于Java模块的项目。我有一个父项目(pom项目),它包含其他模块、war模块和一些jar模块。 我想知道一个模块是一个提供者,所以我在一个模块中定义了一个提供者类,它将在另一个模块中使用。 在webapplication的应用程序启动期间,定义如下: @WebListener 公共类ServletContext实现ServletContextListener。。 我想获取模块提供的所有服务的列表,因此我使用了以下命令: ServiceLoader服务=ServiceLoader
@WebListener
公共类ServletContext实现ServletContextListener。。
我想获取模块提供的所有服务的列表,因此我使用了以下命令:
ServiceLoader服务=ServiceLoader.load(MyClass.class);
不幸的是,此指令无法检索任何服务
所以,我做了一个新项目,并试图了解我是否犯了一些错误。在新项目中,ServiceLoader.load工作正常。在本例中,我没有使用servlet来测试它,而是通过一个Main类来运行它。
我将这些类放入我的原始项目中,并尝试使用Main类运行它们,然后再次使用ServiceLoader.load正常工作
当我从web类ServletContext
调用ServiceLoader.load时,它似乎不起作用
我正在使用Java11,Tomcat9.0.40
是否有人已经面临过这个问题?您可以在类路径中拥有一个文件,就像
src
|-- main
|-- resources
|-- META-INF
|-- services
|-- org.apache.logging.log4j.util.PropertySource
org.apache.logging.log4j.util.EnvironmentPropertySource
将org.apache.logging.log4j.util.PropertySource
替换为您自己的接口名称
文件的内容文本是实现接口的类名,就像
src
|-- main
|-- resources
|-- META-INF
|-- services
|-- org.apache.logging.log4j.util.PropertySource
org.apache.logging.log4j.util.EnvironmentPropertySource
您必须确保jar位于${java.ext.dirs}
的目录中,我也尝试过类似的方法。我会再试一次,我会告诉你我已经按照你的指示做了,但还是不行。我的项目是一个maven项目。当我从Eclipse运行它时,服务列表仍然是空的。