代码之家  ›  专栏  ›  技术社区  ›  Organiccat

将Java包添加到GWT中

  •  10
  • Organiccat  · 技术社区  · 15 年前

    我尝试过搜索,但无法找到一种定义的方法,如何将您自己的包添加到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
    

    有人能告诉我我做错了什么,怎么解决这个问题吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   rustyshelf    15 年前

    您可以去掉这两条源路径行,因为在默认情况下,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仿真库的一部分的Java类,如果您的项目不编译。不过,关于这一点,您应该有非常具体的错误。例如,如果不模拟库类,则不能使用java.math.bigdecimal。但是,您创建的所有类都可以使用。

        2
  •  9
  •   samiq    14 年前

    尽管如此,正如@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"

    希望这能帮助您回到正轨,以最好的方式组织代码。