在将.jar部署到jboss eap 7时获得反射信息错误

时间:2017-04-18 13:26:18

标签: eclipse maven jboss wildfly jboss-eap-7

我正在尝试将ejb jar文件部署到jboss eap 7.0.0作为maven项目。该项目使用Config-1.3.1.jar作为依赖项,我已将其添加到项目的pom.xml中。我是jboss和maven的新手,所以我真的不知道我在这里做错了什么。这是pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>xxx.xxx.xxx</groupId>
    <artifactId>xxx-xxx-xxx-xxx</artifactId>
    <version>xxx</version>
</parent>

<artifactId>xxx-xxx-xxx-ejb</artifactId>
<name>xxx-xxx-xxx-ejb</name>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.2_spec</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.typesafe</groupId>
        <artifactId>config</artifactId>
        <version>1.3.1</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.javatuples</groupId>
        <artifactId>javatuples</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <finalName>xxx-xxx-xxx-ejb</finalName>
</build>

但是当我尝试将jar部署到jboss时,我得到了错误:

09:50:44,211 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) 
MSC000001: Failed to start service jboss.deployment.unit."xxx-xxx-xxx-ejb.jar".POST_MODULE: 
org.jboss.msc.service.StartException in service jboss.deployment.unit."xxx-xxx-xxx-ejb.jar".POST_MODULE: WFLYSRV0153: Failed to 
process phase POST_MODULE of deployment "xxx-xxx-xxx-
ejb.jar"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class xxx.mbean.ConfigCache with ClassLoader ModuleClassLoader for Module "deployment.xxx-xxx-xxx-ejb.jar:main" from Service Module Loader
at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:106)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:91)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:76)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)
... 5 more
Caused by: java.lang.NoClassDefFoundError: com/typesafe/config/Config
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:80)
at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)
... 10 more
Caused by: java.lang.ClassNotFoundException: com.typesafe.config.Config from [Module "deployment.xxx-xxx-xxx-ejb.jar:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 15 more

有谁知道我在这里做错了什么?如果需要,我很乐意发布更多信息。

1 个答案:

答案 0 :(得分:0)

您需要找到一种方法来创建此依赖项中的类:

<dependency>
    <groupId>com.typesafe</groupId>
    <artifactId>config</artifactId>
    <version>1.3.1</version>
    <scope>provided</scope>
</dependency>

可能还有这个:

<dependency>
    <groupId>org.javatuples</groupId>
    <artifactId>javatuples</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
</dependency>

可用于您的EJB jar。

这通常是通过将这些jar与EJB jar一起打包到EAR文件中来实现的。

或者,您可以使用Class Loading in WildFly 10中描述的方法之一。

最终,它取决于您的EJB做什么以及它们的客户端(如果有)的部署位置。

例如,将项目的包装类型更改为:

可能更容易
<artifactId>xxx-xxx-xxx-ejb</artifactId>
<packaging>war</packaging>

以便将依赖项添加到WEB-INF / lib目录中(如果删除provided范围),这比编写EAR文件容易得多。

Java EE 6和7允许在WAR文件中部署EJB。