1

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出了什么问题。是配置问题吗?

4

1 回答 1

3

是的,正如 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

这会混淆类加载器并导致上述错误。

要解决这个问题,请将 Deltaspike 库标记为<scope>provided</scope>WAR POM 中,这样它们就不会被捆绑到 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>
于 2018-03-08T20:05:50.580 回答