EAR应用程序由EJB模块+ WAR模块组成。两者都取决于Deltaspike(1.8.0)库。 在JBoss EAP 7.0下部署应用程序时,输出显示以下异常:
Caused by: java.util.ServiceConfigurationError: org.apache.deltaspike.core.spi.config.ConfigSourceProvider: Provider org.apache.deltaspike.core.impl.config.DefaultConfigSourceProvider not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.apache.deltaspike.core.util.ServiceUtils.loadServiceImplementations(ServiceUtils.java:66)
来自WAR模块的CDI View扩展名出现问题。 EJB模块的初始化是正确的。
WAR出了什么问题。这是配置问题吗?
答案 0 :(得分:2)
是的,这是James R. Perkins在评论中提出的配置问题。
如果您打开EAR(在任何ZIP文件查看器中),您会注意到有两个Deltaspike库副本:
application.ear
├── lib
│ ├── deltaspike-core-api-1.x.y.jar
│ └── deltaspike-core-impl-1.x.y.jar
├── web-app.war
| └── WEB-INF
│ └── lib
│ ├── deltaspike-core-api-1.w.z.jar
│ └── deltaspike-core-impl-1.w.z.jar
这会使类加载器混淆并导致上述错误。
要解决此问题,请在WAR POM中将Deltaspike库标记为<scope>provided</scope>
,以便它们不会捆绑到WAR WEB-INF/lib
中:
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<scope>provided</scope>
</dependency>