2012-03-24 77 views
1

GWT in Action,2ed(MEAP),218页表示我们可以在客户端代码中引用注释中的服务器端类,如@ProxyFor。这是符合逻辑的,什么我希望......从GWT编译但我得到异常:GWT RequestFactory:在客户端程序包中使用服务器类

Validating newly compiled units 
[ant:java]  Errors in 'file:/C:/git/mvp_ap_test/src/de/mycompany/client/AppRequestFactory.java' 
[ant:java]   Line 9: The import de.mycompany.server.AnnotatedRfqServiceLocator cannot be resolved 
[ant:java]   Line 10: The import de.mycompany.server.dao.AnnotatedRfqService cannot be resolved 
[ant:java]   Line 15: AnnotatedRfqService cannot be resolved to a type 
[ant:java]   Line 15: AnnotatedRfqServiceLocator cannot be resolved to a type 
[ant:java]   Line 15: Class<AnnotatedRfqServiceLocator> cannot be resolved to a type 
[ant:java]  Errors in 'file:/C:/git/mvp_ap_test/src/de/mycompany/client/proxy/AnnotatedRfqProxy.java' 
[ant:java]   Line 9: The import de.mycompany.server.AnnotatedRfqServiceLocator cannot be resolved 
[ant:java]   Line 10: The import de.mycompany.server.domain.AnnotatedRfq cannot be resolved 
[ant:java]   Line 12: AnnotatedRfq cannot be resolved to a type 
[ant:java]   Line 12: AnnotatedRfqServiceLocator cannot be resolved to a type 
[ant:java]   Line 12: Class<AnnotatedRfqServiceLocator> cannot be resolved to a type 
[ant:java]  Errors in 'file:/C:/git/mvp_ap_test/src/de/mycompany/client/proxy/AnnotationProxy.java' 
[ant:java]   Line 6: The import de.mycompany.server.domain.Annotation cannot be resolved 
[ant:java]   Line 8: Annotation cannot be resolved to a type 
[ant:java] Removing invalidated units 

我不引用任何服务器端类,除了在注释:

package de.mycompany.client; 

import com.google.web.bindery.requestfactory.shared.Request; 
import com.google.web.bindery.requestfactory.shared.RequestContext; 
import com.google.web.bindery.requestfactory.shared.RequestFactory; 
import com.google.web.bindery.requestfactory.shared.Service; 

import de.mycompany.client.proxy.AnnotatedRfqProxy; 
import de.mycompany.server.AnnotatedRfqServiceLocator; 
import de.mycompany.server.dao.AnnotatedRfqService; 

public interface AppRequestFactory extends RequestFactory { 
    AnnotatedRfqRequest annotatedRfqRequest(); 

    @Service(value = AnnotatedRfqService.class, locator = AnnotatedRfqServiceLocator.class) 
    public interface AnnotatedRfqRequest extends RequestContext { 
     Request<AnnotatedRfqProxy> findOne(String id); 
    } 

} 

回答

3

一段时间后,我遇到了同样的问题。你的代码没有问题。默认情况下,GWT编译器不会包含注释引用的用于编译的类,这很疯狂。所以,你看到AnnotatedRfqService cannot be resolved to a type的原因是因为这些类实际上并没有被编译。解决方案是在尝试编译GWT模块之前(通过Ant,大概)运行Java Compiler编译所有内容。

我问(回答)同样的问题在这里:https://stackoverflow.com/a/8766677/291180

出于某种原因,GWT忽略该类型import声明,但他们并不认为这是一个错误。荒谬。 http://code.google.com/p/google-web-toolkit/issues/detail?id=5378