2013-01-03 77 views
0

Eclipse版本:靛藍ClassNotFoundException的部署時,多模塊POM項目(EAR)到WTP

目標應用服務器:的Weblogic 10.3.5(11gR1中)

我有麻煩構建和部署一個在Eclipse中的多模塊POM項目(打包成EAR)到我的WebLogic服務器。

儘管父POM成功構建EAR文件在IDE之外,我收到試圖將UI WAR部署到應用服務器時出現以下錯誤:

java.lang.Exception: Exception received from deployment driver. See Error Log view for more detail. 
    at oracle.eclipse.tools.weblogic.server.internal.DeploymentProgressListener.watch(DeploymentProgressListener.java:190) 
    at oracle.eclipse.tools.weblogic.server.internal.WlsJ2EEDeploymentHelper.deploy(WlsJ2EEDeploymentHelper.java:486) 
    at oracle.eclipse.tools.weblogic.server.internal.WeblogicServerBehaviour.publishWeblogicModules(WeblogicServerBehaviour.java:1466) 
    at oracle.eclipse.tools.weblogic.server.internal.WeblogicServerBehaviour.publishToServer(WeblogicServerBehaviour.java:898) 
    at oracle.eclipse.tools.weblogic.server.internal.WeblogicServerBehaviour.publishOnce(WeblogicServerBehaviour.java:686) 
    at oracle.eclipse.tools.weblogic.server.internal.WeblogicServerBehaviour.publish(WeblogicServerBehaviour.java:539) 
    at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:774) 
    at org.eclipse.wst.server.core.internal.Server.publishImpl(Server.java:3027) 
    at org.eclipse.wst.server.core.internal.Server$PublishJob.run(Server.java:341) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 
Caused by: weblogic.application.ModuleException: Failed to load webapp: 'lerp-ui' 
    at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:393) 
    at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176) 
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199) 
    at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:517) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) 
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:159) 
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:45) 
    at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:613) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) 
    at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:184) 
    at weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:58) 
    at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:154) 
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60) 
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.createAndPrepareContainer(ActivateOperation.java:207) 
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doPrepare(ActivateOperation.java:98) 
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.prepare(AbstractOperation.java:217) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentPrepare(DeploymentManager.java:747) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.prepareDeploymentList(DeploymentManager.java:1216) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.handlePrepare(DeploymentManager.java:250) 
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.prepare(DeploymentServiceDispatcher.java:159) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentReceiverCallbackDeliverer.java:171) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer.java:13) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:46) 
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178) 
Caused by: java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet 

    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297) 
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:305) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:246) 
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43) 
    at weblogic.servlet.internal.WebAnnotationProcessorImpl.processServlets(WebAnnotationProcessorImpl.java:225) 
    at weblogic.servlet.internal.WebAnnotationProcessorImpl.processJ2eeAnnotations(WebAnnotationProcessorImpl.java:209) 
    at weblogic.servlet.internal.WebAnnotationProcessorImpl.processAnnotations(WebAnnotationProcessorImpl.java:105) 
    at weblogic.servlet.internal.WebAppServletContext.processAnnotations(WebAppServletContext.java:1368) 
    at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:449) 
    at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:493) 
    at weblogic.servlet.internal.HttpServer.loadWebApp(HttpServer.java:418) 
    at weblogic.servlet.internal.WebAppModule.registerWebApp(WebAppModule.java:972) 
    at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:382) 

儘管這是具有jsf-在這兩個Maven的POM API的依賴,並在用戶界面WAR項目.classpath文件中引用:

<dependency> 
      <groupId>javax.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.0.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.0.3</version> 
     </dependency> 

的POM UI WAR項目的片段

的.classpath的UI WAR項目:

<classpathentry kind="var" path="M2_REPO/javax/faces/jsf-api/2.0.3/jsf-api-2.0.3.jar"/> 
    <classpathentry kind="var" path="M2_REPO/com/sun/faces/jsf-impl/2.0.3/jsf-impl-2.0.3.jar"/> 

下面跟隨多模塊項目的整個父POM:

<?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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>uk.co.7specialgems</groupId> 
    <artifactId>multiModulePOMProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <name>7specialgems troublesome project</name> 


    <modules> 
     <module>../../Business/common</module> 
     <module>../../Business/svccom</module> 
     <module>../../Business/busctl</module> 
     <module>../../Client/ui</module> 
     <module>../../Business/ear</module> 
     <module>../../Business/talend/java/businessrules</module> 
    </modules> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.9</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>1.9.0</version> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 

    <properties> 

     <project.ui.version>1.0-SNAPSHOT</project.ui.version> 
     <project.common.version>1.0-SNAPSHOT</project.common.version> 
     <project.svccom.version>1.0-SNAPSHOT</project.svccom.version> 
     <project.busctl.version>1.0-SNAPSHOT</project.busctl.version> 

     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <webapp.filter>development</webapp.filter> 
     <spring.version>3.0.5.RELEASE</spring.version>  
     <eclipselink.version>2.1.3</eclipselink.version> 
     <persistence.version>2.0.0</persistence.version> 
     <spring.cdi.version>1.0.0</spring.cdi.version> 

     <weblogic.adminurl>t3://localhost:7050</weblogic.adminurl> 
     <weblogic.user>weblogic</weblogic.user> 
     <weblogic.password>welcome1</weblogic.password> 
     <weblogic.target>7specialGemsLocalDomain</weblogic.target> 
     <weblogic.source>../../Business/ear/target/${parent.artifactId}.${packaging}</weblogic.source>    

    </properties> 

    <profiles> 
     <profile> 
      <id>production</id> 
      <properties> 
       <webapp.filter>production</webapp.filter> 
      </properties> 
     </profile> 
    </profiles> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.4.2</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

很顯然,這是一些classpathing問題,但是我已經在兩天的時間裏看到了卷軸,並且已經決定現在是揮舞白旗並呼籲幫助的時候了!

最終目標是讓我的EAR項目(目前因爲每次少許更改而在惱人的需求中被取消部署/重新部署在命令行上)並獲取它,以便我可以在部署中執行hotfix在IDE中運行。

感謝

更新:

通過將違規依賴於應用服務器的domains\<domain>\lib文件夾,並重新啓動應用程序服務器,我現在已經開始越來越ClassNotFoundExceptions其他WAR依賴性。現在很清楚的是Eclipse的不尊重WAR項目的classpath - 我還是不明白爲什麼或如何:-(

+0

m2e安裝? m2e爲wtp安裝?如果是的哪個版本?可能升級到Juno? – khmarbaise

+0

M2E v1.0.100.20110804-1717,WTP 3.3.1。很遺憾,無法升級到Juno - 我受到IT部門的限制,無法使用Oracle WebLogic 10.3.5(11gR1)v3.7.1提供的Indigo版本。 – 8bitjunkie

+0

已經正確地將Maven項目導入到Eclipse中,但.classpath看起來不像這樣。 – khmarbaise

回答

2

要打包依賴到你lib目錄,添加到您的EAR包裝pom

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <version>6</version> 
      <defaultLibBundleDir>lib</defaultLibBundleDir> 
      <modules> 
       [Your EJB and Web modules here] 
      </modules> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

通知的defaultLibBundleDir標籤。

0

建立在Eclipse中使用File > Export的EAR後,我能夠比較耳朵在我的Maven POM中製作的。

我發現Eclipse中沒有包含對Maven的依賴關係建立在部署大會路徑項目(我發現,簡單地把項目作爲依賴是不夠的)。

閱讀了這個主題後,我發現將子WAR和JAR的Maven Dependencies添加到他們各自的WAR和JAR項目中是必要的,但是目的地爲

../ lib中

這被聲明在每個WAR 和JAR父EAR的lib文件夾。

使用此菜單的組合(或者依次編輯每個受影響的WAR和JAR的相應.settings/org.eclipse.wst.common.component文件)我能夠構建一個版本與通過我的Maven腳本生成的EAR匹配。

我希望這可以幫助別人。

相關問題