2012-11-26 71 views
1

我有一個基於GWT的Maven應用程序。在將GWT-RPC-Applicaton部署到JBoss AS 7.1.1時出現ClassNotFoundException異常

當我編譯,構建並通過Maven將其部署到JBoss AS 7.1.1時,我的GWT-RPC服務得到了一個ClassNotFoundException異常。之前我包括我部署的,我可以顯示GWT的小部件,所以GWT-罐應該有......

我的Maven的依賴關係是這樣的:

<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-dev</artifactId> 
    <version>2.5.0</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-user</artifactId> 
    <version>2.5.0</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-servlet</artifactId> 
    <version>2.5.0</version> 
    <scope>compile</scope> 
</dependency> 

我的耳朵看起來是這樣的:

-myEar.ear 
| | 
| |- core.jar 
| 
|--|- gwt-ui.war 
| | 
| |-- gwt-ui 
| | |-- gwt 
| | |-- sc 
| | |-- wgt-ui.nocache.js 
| | 
| |-- META-INF 
| | | (is Empty) 
| | 
| |-- WEB-INF 
| | |-- classes 
| | |  | 
| | |  |- mygwtProj.client 
| | |  | |- services 
| | |  | | | - MyService.class 
| | |  | | | - MyServiceAsync.class 
| | |  | |- dto 
| | |  | | | - DTO.class 
| | |  | 
| | |  |- mygwtProj.server 
| | |  | |- MyServiceImpl.class 
| | |-- deploy 
| | |-- lib 
| | |  | (all gwt-jars-files) 
| | |-- beans.xml 
| | |-- web.xml 

爲MyService:

import java.util.List; 
import com.google.gwt.user.client.rpc.RemoteService; 
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 
import mygwtProj.client.dto.DTO; 

@RemoteServiceRelativePath("myService") 
public interface ShopService extends RemoteService{ 
    List<DTO> getAircrafts(); 
} 

MyServiceAsync中

import java.util.List; 
import com.google.gwt.user.client.rpc.AsyncCallback; 
import mygwtProj.client.dto.DTO; 

@RemoteServiceRelativePath("myService") 
public interface ShopService extends RemoteService{ 
    void getAircrafts(AsyncCallback<List<DTO>> callback); 
} 

MyServiceImpl

import java.util.ArrayList; 
import java.util.List; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 
import mygwtProj.client.dto.DTO; 
import mygwtProj.client.services.MyService; 

public class MyServiceImpl extends RemoteServiceServlet implements MyService { 
    private static final long serialVersionUID = 1L; 

@Override 
public List<DTO> getAircrafts() { 

    List<DTO> list = new ArrayList<DTO>(1); 
    list.add(new ShopItemDTO(1, "man", "typ", 1.0)); 
    return list; 
} 
} 

堆棧跟蹤:

15:28:24,684 WARN [org.jboss.modules] (MSC service thread 1-6) Failed to define class mygwtProj.server.MyServiceImpl in Module "deployment.myEar.ear.gwt-UI.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link mygwtProj/server/MyServiceImpl (Module "deployment.myEar.ear.gwt-UI.war:main" from Service Module Loader) 
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:396) 
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:243) 
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73) 
at org.jboss.modules.Module.loadModuleClass(Module.java:517) 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) 
at org.jboss.as.weld.WeldModuleResourceLoader.classForName(WeldModuleResourceLoader.java:68) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.weld.bootstrap.BeanDeployer.loadClass(BeanDeployer.java:107) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:77) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.BeanDeployer.addClasses(BeanDeployer.java:135) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.BeanDeployment.createBeans(BeanDeployment.java:184) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:349) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:82) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.as.weld.services.WeldService.start(WeldService.java:76) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03] 
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03] 
Caused by: java.lang.NoClassDefFoundError: myProj/client/services/MyService 
at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_03] 
at java.lang.ClassLoader.defineClass(ClassLoader.java:791) [rt.jar:1.7.0_03] 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.7.0_03] 
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:327) 
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:391) 
... 21 more 
Caused by: java.lang.ClassNotFoundException: myProj.client.services.MyService from [Module "deployment.myEar.ear.gwt-UI.war:main" from Service Module Loader] 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) 
... 26 more 

15:28:24,700 INFO [org.jboss.weld.ClassLoading] (MSC service thread 1-6) WELD-000119 Not generating any bean definitions from myProj.server.MyServiceImpl because of underlying class loading error 
15:28:24,700 INFO [org.jboss.weld.ClassLoading] (MSC service thread 1-6) catching: org.jboss.weld.resources.spi.ResourceLoadingException: java.lang.ClassNotFoundException: myProj.server.MyServiceImpl from [Module "deployment.myEar.ear.gwt-UI.war:main" from Service Module Loader] 
at org.jboss.as.weld.WeldModuleResourceLoader.classForName(WeldModuleResourceLoader.java:74) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.weld.bootstrap.BeanDeployer.loadClass(BeanDeployer.java:107) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:77) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.BeanDeployer.addClasses(BeanDeployer.java:135) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.BeanDeployment.createBeans(BeanDeployment.java:184) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:349) [weld-core-1.1.5.AS71.Final.jar:2012-10-12 10:00] 
at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:82) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.as.weld.services.WeldService.start(WeldService.java:76) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03] 
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03] 
Caused by: java.lang.ClassNotFoundException: myProj.server.MyServiceImpl from [Module "deployment.myEar.ear.gwt-UI.war:main" from Service Module Loader] 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) 
at org.jboss.as.weld.WeldModuleResourceLoader.classForName(WeldModuleResourceLoader.java:68) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final] 
... 12 more 

任何人的線索什麼錯?

+1

這不會解決你的問題,但編譯因爲他們不是在WEB-ING lib中需要提供對GWT用戶和GWT-dev的。 GWT最佳實踐。 – SSR

+0

@SachinShekharR IOW,「'compile'不是你認爲的那樣」;-) –

+0

@eagle:與您的直接問題無關:GWT 2.5.0中存在影響GWT-RPC的包裝錯誤;我們即將發佈2.5.1。 https://code.google.com/p/google-web-toolkit/issues/detail?id=7527 –

回答

1

感謝您的輸入。 我現在計算出這個問題。

是一個愚蠢的錯誤。在maven配置中,我設置客戶端包中的所有類都不應該包含在包裝中,因爲它們被編譯爲JS。所以這包括我的服務接口... 我將它移動到一個新的包共享幷包含在gwt.xml中。

還將gwt-user和gwt-dev更改爲提供的maven作用域,並將gwt-servlet更改爲運行時。

白衣這個配置它的工作:-)

相關問題