10

我已经尝试过搜索,但无法找到一个明确的方法来将您自己的包添加到 GWT 项目中。

我的树结构如下所示:

-com.mycompany
  -public
    MyApplication.html
  MyApplication.gwt.xml


-com.mycompany.client
  MyApp.java

-com.mycompany.gui
  TableLayout.java

我在那里看到的答案说要添加相对于 gwt.xml 文件的根目录的包,如下所示:

<module>
  <inherits name="com.google.gwt.user.User" />
  <entry-point class="com.mycompany.client.MyApp" />
  <source path="client" />
  <source path="gui" />
</module>

然后它抱怨:

Unable to find type 'com.technicon.client.MyApp'
   Hint: Previous compiler errors may have made this type unavailable
   Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly

谁能告诉我我做错了什么以及如何解决这个问题?

4

2 回答 2

9

尽管正如@rustyshelf 指出的那样,gwt 会client.*自动转换所有内容,但有时您会希望将内容保留在客户端包之外(在多个项目中重用它们可能就是其中之一),为此解决方案仍然在于使用该source元素将其他包添加到流程中。

现在有一个技巧,您必须决定是要移动gwt.xml配置文件还是需要创建一个新配置文件。

特别是对于您的情况(两个包在包中共享一个根目录,com.mycompany),您可以将<project_name>.gwt.xml文件移动到最常见的包,然后将新包添加为源(并保留在<source path="client"/>那里)因此使您的文件看起来像:

<source path="client"/>
<source path="gui"/>

另一方面,如果包不共享任何根,只需创建一个*.gwt.xml仅包含源元素的新文件,并将其放在要添加的子包的父包上,即:

<module>
   <source path=""/>
</module>

请注意,如果您需要为嵌套的子包提供编译访问权限,请使用/类似的分隔符来分隔它们"admin/client"

希望这可以帮助您重回正轨并以最佳方式组织您的代码。

于 2010-03-11T17:27:24.980 回答
5

您可以去掉两条源路径行,因为默认情况下,GWT 将拾取与根目录相关的任何内容,并且像您一样在客户端包中。您还需要将您的 gui 包移动到您的客户端包中,因此它将变为:

-com.mycompany
  -public
    MyApplication.html
  MyApplication.gwt.xml


-com.mycompany.client
  MyApp.java

-com.mycompany.client.gui
  TableLayout.java


<module>
  <inherits name="com.google.gwt.user.User" />
  <entry-point class="com.mycompany.client.MyApp" />
</module>

假设您的 MyApp.java 是一个实际的入口点,那么这应该可以正常工作。

需要注意的另一件事是,您不能使用不属于 GWT JRE Emulation 库的 java 类,如果这样做,您的项目将无法编译。不过,您应该得到非常具体的错误。例如,如果没有模拟它们,则不能使用 java.math.BigDecimal 之类的库类。您创建的所有自己的类都可以使用。

于 2009-01-13T21:19:57.287 回答