我正在尝试创建 GWT 小部件模块。现在,它只有一个小部件,仅用于测试。我尝试将这个模块包含在一个不同的项目中,我得到:
No source code is available for type com.company.gwt.client.components.VerticalDiv; did you forget to inherit a required module?
在我的主项目module.gwt.xml中我有:
<module>
<!-- Google Modules -->
<inherits name="com.google.gwt.user.User" />
<inherits name="com.googlecode.gwt.crypto.Crypto" />
<inherits name="com.company.gwt.GWT_Library" />
<entry-point class="com.company.app.client.App" />
<source path="" />
<resource path="resources" />
<!-- Only support recent browsers -->
<set-property name="user.agent" value="ie10,gecko1_8,safari" />
</module>
GWT_Library xml位于com.company.gwt中,如下所示:
<module>
<inherits name="com.google.gwt.user.User" />
<inherits name="com.google.gwt.resources.Resources" />
<source path="client" />
<resource path="client" />
</module>
项目结构:
.
+-- pom.xml
+-- src
| +-- main
| +-- java
| +-- com
| +-- company
| +-- gwt
| +-- client
| +-- components
| +-- VerticalDiv.java
| +-- resources
| +-- com
| +-- company
| +-- gwt
| +-- GWT_Library.gwt.xml
| +-- client
我知道主要项目包括它,因为如果我更改module.gwt.xml中的 inherits 行,它会给我一个错误,它无法找到它。< / p>
这是VerticalDiv类:
package com.company.gwt.client.components;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.FlowPanel;
public class VerticalDiv extends FlowPanel implements HasClickHandlers
{
public VerticalDiv()
{
}
@Override
public HandlerRegistration addClickHandler(ClickHandler handler)
{
return this.addDomHandler(handler, ClickEvent.getType());
}
}
这个课曾经在我的主项目中工作,并且在那里工作得很好。我有另一个名为&#34; Shared&#34;的模块,它也可以正常工作。虽然,这个软件包没有任何可以在UiBinder中使用的软件包。我认为这可能是不同的。在UI绑定器中引用VerticalDiv类,如下所示:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:e="urn:import:com.company.app.client.widgets"
xmlns:c="urn:import:com.company.gwt.client.components"
>
<ui:style>
<!-- styling -->
</ui:style>
<g:HTMLPanel>
<c:VerticalDiv>
<e:LinkButton ui:field="viewAll" text="All Notifications"></e:LinkButton>
</c:VerticalDiv>
</g:HTMLPanel>
</ui:UiBinder>
正如您所看到的,我还使用了主项目中的小部件,它以这种方式正常工作。
我的模块小部件是否缺少可在UiBinder文件中使用的东西?
答案 0 :(得分:0)
您需要为“组件”模块创建描述符,例如您的com.company.gwt目录中的MyComponents.gwt.xml。然后你需要在你的主模块xml中继承它:
<inherits name="com.company.gwt.MyComponents"/>
这个MyComponents.gwt.xml可以非常简单(取决于它使用的GWT模块):
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name='com.google.gwt.i18n.I18N'/>
<inherits name="com.google.gwt.resources.Resources"/>
<!-- Specify the paths for translatable code -->
<source path='client'/>
<source path='shared'/>
</module>
答案 1 :(得分:0)
这个错误比预期更准确......
我和maven一起建设,所以为了完成这项工作,我必须:
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<dependency>
<artifactId>gwt-library</artifactId>
<groupId>com.company.gwt</groupId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>gwt-library</artifactId>
<groupId>com.company.gwt</groupId>
<version>1.0.0-SNAPSHOT</version>
<classifier>sources</classifier>
</dependency>
所以,错误是正确的。源代码确实无法使用。