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

问题描述:

我试图将ejb jar文件部署到jboss eap 7.0.0作为maven项目。该项目使用Config-1.3.1.jar作为我添加到项目的pom.xml中的依赖项。我是jboss和maven的新手,所以我不知道我在这里做错了什么。下面是pom.xml中将.jar部署到jboss eap时得到反射信息错误7

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

但是,当我尝试部署罐子到JBoss,我得到的错误(S):

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 

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

你需要找到一种方法,使这种依赖的类:

<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。