2009-06-04 52 views
19

我有在Eclipse 3.4 GWT 1.6的項目,我試圖從我的工作區的另一個(非GWT)項目中引用源。我已將項目添加到構建路徑,但無法在託管模式下運行應用程序。當我這樣做時,我得到一個「沒有源代碼可用」的錯誤。Eclipse 3.4 GWT 1.6項目 - 如何引用其他項目的源代碼?

我已經做了一些搜索和閱讀,並已嘗試其他人所說的幾件事(包括創建從依賴項目罐子並鏈接到它),但坦率地說沒有奏效。

如果你真的這樣做的時候,請你幫我出一個簡單的一步一步的設置?我真的很感激,謝謝!

回答

16

我有2個Eclipse項目。一個是gwt項目,另一個不是。下面是對我的作品的目錄結構:

workspace 
-- gwt-project 
    -- src/main/java 
     -- com.gwt.GwtProjectModule 
     -- GwtProjectModule.gwt.xml 
-- non-gwt-project 
    -- src/main/java 
     -- com.nongwt.package.that.contains.source.you.need 
     -- nongwt.gwt.xml 
     -- com.nongwt.package.that.contains.source.you.need.client 

nongwt.gwt.xml告訴GWT看看裏面的「客戶」包,這裏是什麼樣子:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd"> 
<module rename-to='nongwt'> 
    <inherits name='com.google.gwt.user.User' /> 
    <source path="client" /> 
</module> 

GwtProjectModule.gwt.xml能然後繼承nongwt的源代碼。下面是從內部GwtProjectModule.gwt.xml相關線路:

<inherits name="com.nongwt.package.that.contains.source.you.need.nongwt" /> 

請務必包括GWT項目在Eclipse中的類路徑裏面非GWT項目。這是正常的演習;或者,不要在gwt-project的類路徑中包含non-gwt-project,而應該在gwt-project中選擇屬性,選擇屬性,選擇「Java Build Path」,點擊「Projects」選項卡和「non-gwt-project」作爲項目參考,您還可以將非gwt-project的內容jar,確保將源代碼包含在jar中,然後將該jar包含在gwt-project的類路徑中。

祝你好運!

0

GWT並不瞭解其它的代碼,因爲它是不是在你的項目的客戶端目錄。您需要將其他代碼的源路徑添加到.gwt.xml文件。只要將它如下

<source path="common" /> 

共同就是額外的代碼是這個例子的目錄添加到XML。

退房的GWT項目(客戶端包下的類)此doc

+0

我試過了。然後它說它找不到入口點類(嗯,它只是說它找不到類型xxx.xxx.MyEntryPointClassType)。班在那裏。如果我刪除依賴項目和引用,一切正常。 – Boden 2009-06-04 19:39:01

+0

您還需要確保將客戶端目錄添加爲.gwt.xml文件中的源路徑。由於某些原因,如果您添加自定義源路徑,則看不到默認的客戶端源路徑。所以基本上你既需要<源路徑=「普通」 /> 和<源路徑=「客戶端」 /> 把事情的工作 – Carnell 2009-06-04 22:21:19

+0

這也不工作... 到目前爲止,我得到它的唯一方法是在依賴項目中創建一個.gwt.xml模塊,從源文件夾創建一個jar,然後在gwt項目中「繼承」模塊。這是遠非理想,但不同的作品。 – Boden 2009-06-05 15:14:31

1

客戶端代碼XML元素參考部分不能引用不在一個GWT的任何類模塊。

如果你有在你想在你的GWT項目,從客戶端代碼中引用另一個項目代碼,您需要:

  • 確保它的所有「GWT安全」,這意味着它不」 T參考不由GWT(http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html)仿真的任何JRE類,或參考引用JRE類未被模擬
  • 確保所有被引用的類是GWT模塊中的任何類。這意味着將在您的其他項目MyOtherProject.gwt.xml文件,以及所有被引用的類必須是客戶分包
  • 下讓你的GWT項目與其他項目繼承。所以,以下內容添加到您的GWT項目的gwt.xml模塊文件:

<繼承名= 'com.yourCompany.otherProject.MyOtherProject'/ >

1

博登:以下內容添加到您的模塊文件

<source path=""></source> 

除了你的其他來源,如:

<source path=""></source> 
<source path="com.acme.otherpackage"></source> 

然後編譯器不會抱怨。

至少這就是我解決它的方法。不知道如果使用path =「」允許包含所有內容,我假設它是沒有指定源時的默認值。

0

在您的gwt項目中,轉至屬性,Java構建路徑,源代碼,單擊「鏈接源代碼」並指向您希望包含的非gwt項目源代碼包。

3

我知道這個職位是很老,但我花了在這個問題上相當多的時間,終於找到了這樣做的方式,我想我可能會分享答案:

一旦你創建了啓動配置,打開它運行>運行配置... 轉到classpath選項卡並選擇用戶條目。添加高級>文件夾並選擇其他模塊項目的源文件夾。如果我將模塊conf文件分隔在src/main/resources文件夾中,那麼您也必須添加它。

應該工作。

0

編輯:發現了一個eclipse修復。運行config> Classpath> Advanced> Add folder> otherproject/src。

原因:Eclipse添加了導出項目的bin文件夾。 GWT需要src文件夾。

詳細闡述我的評論。

我在Eclipse Neon上使用gwt 2.8,Java 1.8.0_92。在eclipse中引用另一個項目無法啓動devmode,因爲它無法從另一個項目中找到引用文件的源代碼。

什麼工作:

切換到 '蟻DEVMODE' 完全。做了以下修改到build.xml:

​​

現在做一個生產建立與「蟻族」或開始「蟻DEVMODE」 DEVMODE。

其他的事情,我注意到

  1. 在接受的答案使用方法,otherproject/src目錄/ foo.gwt.xml拾取(抱怨如果不可用),並從類的靜態值回升。沒有別的。很奇怪。

  2. 據我所知,在DEVMODE/gwtc可執行拿起從它們的類路徑來源。所以只需要eclipse將引用的項目添加到他們的類路徑中即可。我無法做到這一點,但這似乎是可能的。固定見頂部。

1

這是斯文Buschbeck提出您的問題的一個夢幻般的溶液(必須挪威,哈哈!),爲我工作!

在幾個大型項目時(在Eclipse),它的方便,當然更有效地共享和重用通過公共庫的代碼。雖然它們處於早期階段,但它們需要進行大量更改,因此在每次更新庫時都可以方便地鏈接項目,而不是創建新的罐子。 不幸的是,在Eclipse的Java開發這一標準的做法根本不是那麼簡單的,與普通的Java項目中,總共需要三個步驟:

  1. 鏈接庫項目所有相關項目(「項目 首」 - >‘Java構建路徑’ - >‘項目’ - >‘添加...’)
  2. 然後,添加庫的客戶端代碼(可以將其作爲一個 模塊)。因此,編輯GWT。 xml應用程序並添加 例如 其中SuperLib是您庫中gwt.xml文件的文件名 項目,並在此之前是它所在的包。
  3. 通過鏈接源文件夾將代碼添加到項目中。 不幸的是,如果您不想編寫Ant 腳本來編譯您的應用程序,則這是必需的。 (如果你喜歡螞蟻檢查 了這一點),我不喜歡使用這樣的腳本,因爲如果 你忘記在每次進行更改時運行它的想法,你會在 結束了混亂,讓我們去方便,自動的方式。

    • 將文件夾添加到您的應用程序項目;打開文件夾創建對話框中的「高級」部分,選擇「鏈接到備用位置」並選擇您的庫項目的源文件夾(通常爲「src」)。 (提示:如果你在一個使用版本控制系統的團隊中工作,你可以爲該文件夾創建一個變量,並用它來代替。這樣,每個同事都可以將庫項目放在不同的文件夾中,並通過調整可變:))

    • 右鍵單擊該文件夾,「構建路徑」 - >「使用的源文件夾」。完成。 令人驚訝的是,用於Eclipse的GWT插件並不尊重項目鏈接,因此所有引用都需要明確,否則最終會出現以下大量問題:ClassNotFoundException。

相關問題