Maven Widgetset不包含实现

Maven Widgetset不包含实现,maven,gwt,intellij-idea,jetty,vaadin,Maven,Gwt,Intellij Idea,Jetty,Vaadin,我正在尝试创建一个自定义小部件,它将模拟一个导航抽屉,类似于Vaadin中的Android/Polymer。但是,我不断遇到一些错误,例如: Widgetset“X”不包含“Y”的实现。检查其组件连接器的@Connect映射、widgetsets GWT模块描述文件,然后重新编译widgetset。如果您下载了vaadin附加程序包,您可能需要参考附加程序说明 我已经在以下文件结构中设置了我的自定义小部件,正如我在《瓦丁之书》第16章中所读到的,文件结构要求“客户端”包处于.gwt.xml级别:

我正在尝试创建一个自定义小部件,它将模拟一个导航抽屉,类似于Vaadin中的Android/Polymer。但是,我不断遇到一些错误,例如:

Widgetset“X”不包含“Y”的实现。检查其组件连接器的@Connect映射、widgetsets GWT模块描述文件,然后重新编译widgetset。如果您下载了vaadin附加程序包,您可能需要参考附加程序说明

我已经在以下文件结构中设置了我的自定义小部件,正如我在《瓦丁之书》第16章中所读到的,文件结构要求“客户端”包处于.gwt.xml级别:

 src/main/my/domain/core/views/drawerpanel
 |---DrawerPanel.java
 |---DrawerPanelWidgetSet.gwt.xml
 |---client
        |----DrawerPanelClientRpc.java
        |----DrawerPanelConnector.java
        |----DrawerPanelLisetener.java
        |----DrawerPanelServerRpc.java
        |----DrawerPanelState.java
        |----VDrawerPanel.java
但是,当连接器位于客户机包中时,编译器会不断抱怨无法跟踪DroperPanel的文件路径或无法找到类型DroperPanel。这只能通过将连接器移出客户端并提升到.gwt.xml级别来解决

感谢您的帮助

更新 我已将DrawerPanel.java移到src/main/my/domain/core/views,并将DrawerPanelWidgetset.gwt.xml移到src/resources目录。
它已停止抱怨连接器无法在立即编译时跟踪文件路径。不幸的是,仍然接收Widgetset“X”的运行时不包含“Y”的实现。

小部件编译的问题是错误不够清楚。 所以您可以尝试将-trace传递给编译器,这样它就可以打印出关于后台发生的事情的更多细节

确保不要在连接器状态中使用基元类型。
此外,使用Short-type会导致编译小部件时出错,编译器不会向您显示明确的错误。

要调试此类问题,您应该首先查看GWT编译器输出中是否提到了
DrawerPanelConnector

如果提到,问题可能是
@Connect
注释中定义的类与服务器上使用的类不同。这可能是由以下情况引起的:例如,如果您意外地从其他包导入了同名的类

这种情况下的另一个潜在原因是您没有使用正确的widgetset,或者您的浏览器由于某种原因获得了旧的缓存版本(由浏览器缓存,或者因为最新版本未部署到您的服务器)。您可以通过查看浏览器加载的
[hexcode].cache.js
文件的名称(通过查看浏览器开发工具中的“网络”选项卡)并验证编译器输出文件夹中是否存在相同的文件来跟踪此情况

如果日志中没有提到您的连接器,那么出于某种原因,GWT编译器不会选择它。这可能是因为类位于GWT编译器不查看的文件夹中,因为类上没有
@Connect
注释,或者因为连接器类(或连接器类使用的某些其他类)包含GWT不支持的内容

要调试这种情况,可以使用
-strict
选项运行GWT编译器。这使得编译器将所有发现的问题都视为错误,而不是假定该类不用于客户端

如果添加
-strict
不会导致任何新错误,则应验证GWT编译器是否找到了连接器类。您可以通过在类中使用一些与GWT不兼容的API来检查这一点,例如,
System.load(“”)
。如果没有得到任何错误(仍然启用了
-strict
),这意味着编译器甚至从未查看该类。在这种情况下,您需要验证您的目录结构是否正确,以及您是否实际编译了
DrawerPanelWidgetSet


最后,如果代码中的
-strict
System.load(“”
组合会导致GWT编译器出错,但忽略
System.load(“”
会使编译成功,而不会在编译器输出中提及连接器类,那么我能想象的唯一原因是连接器类中缺少
@Connect
注释。

删除状态/connector中的原语无法解决问题。是否尝试将-trace传递给编译器?我使用-X-e获取详细的编译时日志。我在这里没有注意到任何错误,编译器能够自动发现widgetset描述符文件(.gwt.xml,参考资料中),成功编译排列和链接。但我发现有两件事很奇怪:这个nav抽屉的gwt.xml被添加到由原型创建的main.gwt.xml中,反之亦然,因此它看起来是一个循环引用,jdk 1.8在widgetset客户端类中被拒绝,但这与运行时的原始错误无关。请发布编译器日志!你在做eclipse吗?