GWT 错误:“类在 Gin 中使用,但在 GWT 客户端代码中不可用”

Posted

技术标签:

【中文标题】GWT 错误:“类在 Gin 中使用,但在 GWT 客户端代码中不可用”【英文标题】:GWT Error: "Class is used in Gin, but not available in GWT client code" 【发布时间】:2016-09-14 10:02:35 【问题描述】:

好吧,我对 GWT 还不是很熟悉,自从我开始使用 GWT 以来,这是一个一直困扰着我的错误,而且它不断出现。

我在 Spring 中使用 Arcbees GWTP Framework。我的代码非常简单。我有这样的简单 POJO

public class EmailTask implements Serializable
private static final long serialVersionUID = 2395809310736629787L;

private Integer publisherId;
private String targetPublisherId;

public Integer getPublisherId() 
    return publisherId;


public void setPublisherId(Integer publisherId) 
    this.publisherId = publisherId;


public String getTargetPublisherId() 
    return targetPublisherId;


public void setTargetPublisherId(String targetPublisherId) 
    this.targetPublisherId = targetPublisherId;


在我的 Presenter 类中,我使用异步调用将这个 POJO 的实例传递给这样的控制器。

@Inject TaskServiceAsync taskServiceAsync;

private void myTask()
    taskServiceAsync.executeTask(emailTaskInstance, new AsyncCallback<String>() 
                @Override
                public void onSuccess(String result) 
                    Window.alert("Success");
                

                @Override
                public void onFailure(Throwable caught) 
                    Window.alert("Failure!");
                
            );  

控制器:

@Controller
@RequestMapping("/task")
public class TaskController extends BaseRemoteService implements TaskService 
    private static final long serialVersionUID = -325150527276255072L;

    @Override
    public String executeTask(EmailTask emailTask) 
         //TODO: Doing something here
    

如您所见,没有什么太浮华了。但我在编译时收到以下错误。

[INFO] --- gwt-maven-plugin:2.7.0:compile (default) @ statistics ---

[INFO] Compiling module de.it2media.dps.statistics.DPSStatistics

[INFO]    Ignored 8 units with compilation errors in first pass.

[INFO] Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.

[INFO]    Computing all possible rebind results for 'com.gwtplatform.mvp.client.DesktopGinjector'

[INFO]       Rebinding com.gwtplatform.mvp.client.DesktopGinjector

[INFO]          Invoking generator 
com.google.gwt.inject.rebind.GinjectorGenerator

[INFO]             [WARN] Class de.it2media.dps.statistics.server.jobs.EmailTask is used in Gin, but not available in GWT client code.

[INFO]             [ERROR] Error injecting de.it2media.dps.statistics.client.application.settings.SettingsPresenter$MyProxy: Unable to create or inherit binding: No @Inject or default constructor found for de.it2media.dps.statistics.client.application.settings.SettingsPresenter$MyProxy

请原谅我的简单抱怨,但我不明白我在这里做错了什么。我以前写过类似的代码,它运行得很好。有人可以解释错误Class is used in Gin, but not available in GWT client code 的含义吗?我是否必须以某种方式自动连接某些东西?

【问题讨论】:

【参考方案1】:

首先,您应该将运行配置的 GWT 中的 logLevel 设置为 TRACE

使用 TRACE 将向您显示包含类名和行号的错误。

消息告诉你,de.it2media.dps.statistics.server.jobs.EmailTask 类 由 GIN(客户端)使用,但不是源代码的一部分,将由 GWT 编译。

EmailTask 类放入共享包中,消息应该消失了。

【讨论】:

EmailTask​​ 的包本身应该告诉你有问题,因为它在server 包中。就像这个答案说的那样,将它移到共享或客户端(取决于它的实际预期使用方式),或者停止从客户端代码中引用它并找到一种不同的方式来构建功能。

以上是关于GWT 错误:“类在 Gin 中使用,但在 GWT 客户端代码中不可用”的主要内容,如果未能解决你的问题,请参考以下文章

gwt编译错误

RPC 上的 GWT 404 错误

网站 javascript 创建 GWT 404 错误

GWT Servlet 错误 com.google.gwt.user.client.rpc .StatusCodeException: Tomcat 服务器上的 404

com.google.gwt.dev.jjs.InternalCompilerException:访问期间出现意外错误

GWT + MVP4g+Ivy:编译错误