Deltaspike init在JBoss EAP 7

时间:2017-09-27 17:48:11

标签: jboss-eap-7 deltaspike

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

1 个答案:

答案 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>