2009-01-13 93 views
10

我試過搜索,但無法想出如何將自己的包添加到GWT項目的定義方式。將Java包添加到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 

誰能告訴我什麼,我做錯了,如何解決這一問題?

回答

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這樣的庫類。你創建的所有類都可以使用。

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"

希望這有助於你儘快回到賽場和組織代碼的最好的方式分離這麼做。