2016-09-25 65 views
0

我有一個Web應用程序,我使用resteasy和spring。它在使用WAR時成功部署 ,但在部署EAR時失敗。Jboss WAR部署成功,但EAR失敗classNotFoundException

這是父的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> 

    <groupId>ro</groupId> 
    <artifactId>test</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <modules> 
     <module>Mywar</module> 
     <module>Myear</module> 
    </modules> 

    <dependencies> 

     <dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-spring</artifactId> 
      <version>3.0.9.Final</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- Spring --> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> 
    </dependencies> 

</project> 

`

這是WAR的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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>ro</groupId> 
    <artifactId>mywar</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>mywar Maven Webapp</name> 
    <url>http://maven.apache.org</url> 

    <parent> 
    <artifactId>test</artifactId> 
    <groupId>ro</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 

    <build> 
    <finalName>mywar</finalName> 
    </build> 
</project> 

這是EAR的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <parent> 
     <artifactId>test</artifactId> 
     <groupId>ro</groupId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 
    <artifactId>myear</artifactId> 
    <packaging>ear</packaging> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>ro</groupId> 
      <artifactId>mywar</artifactId> 
      <version>1.0-SNAPSHOT</version> 
      <type>war</type> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-ear-plugin</artifactId> 
       <version>2.3.2</version> 
       <!-- configuring the ear plugin --> 
       <configuration> 
        <modules> 
         <webModule> 
          <groupId>ro</groupId> 
          <artifactId>mywar</artifactId> 
         </webModule> 
        </modules> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

當我部署EAR到JBoss我得到以下錯誤:

15:48:18,266 WARN [org.jboss.modules] (MSC service thread 1-2) Failed to define class org.jboss.resteasy.plugins.spring.SpringContextLoaderListener in Module "deployment.myear-1.0-SNAPSHOT.ear:main" from Service Module Loader: java.lang.LinkageError: Failed to link org/jboss/resteasy/plugins/spring/SpringContextLoaderListener (Module "deployment.myear-1.0-SNAPSHOT.ear:main" from Service Module Loader) 
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:487) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at java.lang.Class.forName0(Native Method) [rt.jar:1.8.0_101] 
    at java.lang.Class.forName(Class.java:348) [rt.jar:1.8.0_101] 
    at org.jboss.as.server.deployment.reflect.DeploymentClassIndex.classIndex(DeploymentClassIndex.java:54) 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:85) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:77) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1980) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1913) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_101] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_101] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_101] 
Caused by: java.lang.NoClassDefFoundError: org/springframework/web/context/ContextLoaderListener 
    at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_101] 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) [rt.jar:1.8.0_101] 
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    ... 19 more 
Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener from [Module "deployment.myear-1.0-SNAPSHOT.ear:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1] 
    ... 23 more 

回答

0

也許你的問題涉及到WebLogic類加載的不同的策略。通過配置weblogic.xml,您可以嘗試強制使用Web-inf中的jar。看看here。您也可以指定類加載順序。此外,爲了更好地理解應用服務器中的classloding與標準java classloading機制的不同之處,我建議您閱讀this answerthis link