2011-10-06 61 views
1

我正在使用GWT 2.4和gquery-dnd-bundle 1.0.4,以便可以使用拖放節點構建樹。我遇到了一個惱人的bug(http://code.google.com/p/gwtquery-plugins/issues/detail?id=6)。其要點是我需要保證文件「gquery-dnd-bundle-1.0.4.jar」在我的WEB-INF/lib目錄中的gwt-servlet.jar文件之前由運行時的類加載器加載。控制JAR如何在類路徑中加載的順序

我該如何保證?

我正在使用Eclipse Indigo和GWT Web應用程序項目(如果有用的話)。

這裏是我看到

[ERROR] [draganddroptree] - Errors in 'jar:file:/C:/Documents%20and%20Settings/E18538/workspace/DragAndDropTree/war/WEB-INF/lib/gquery-dnd-bundle-1.0.4.jar!/gwtquery/plugins/droppable/client/gwt/DragAndDropCellTree.java' 
     [ERROR] [draganddroptree] - Line 24: The type com.google.gwt.user.cellview.client.CellTreeNodeView is not visible 
     [ERROR] [draganddroptree] - Line 86: CellTreeNodeView cannot be resolved to a type 
     [ERROR] [draganddroptree] - Line 87: The constructor DragAndDropCellTreeNodeView<T>(DragAndDropCellTree, CellTreeNodeView<?>, TreeViewModel.NodeInfo<T>, Element, T) refers to the missing type CellTreeNodeView 
    [ERROR] [draganddroptree] - Unable to load module entry point class com.cme.draganddroptree.client.DragAndDropTree (see associated exception for details) 
    [ERROR] [draganddroptree] - Failed to load module 'draganddroptree' from user agent 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1' at localhost:4490 

回答

0

您不能安排你的「WEB-INF/lib目錄」 JAR的的裝載在任何種類的確定性訂單的確切的錯誤。我能想到的唯一可靠的解決方法是將低優先級的JAR文件放在「WEB-INF/lib」之前掃描的目錄中。

例如,if you are using Tomcat, then you could

  1. 放置 「GWT-的servlet.jar」 文件中的 「$ CATALINA_BASE/lib」 目錄。
  2. 在WAR中保留「gquery-dnd-bundle-1.0.4.jar」文件。

這樣,「GWT-的servlet.jar」將被加載到第一CLASSPATH和「gquery-DND-束-1.0.4.jar」將第二加載...從覆蓋所有衝突的類「GWT-的servlet.jar」。

如果您使用的是其他應用服務器,那麼服務器級別的「lib」目錄將會不同......但基本思想是優先級較低的JAR需要進入應用服務器的「lib」,而高優先級的JAR需要留在webapp的「lib」中。

不是世界上最乾淨的情況,但它會保證你想要的結果。

更新:你知道,在仔細考慮它並重新閱讀Tomcat文檔之後,我可能會反其道而行之。您可能需要將「gquery-dnd-bundle-1.0.4.jar」放入您的應用服務器「lib」中,並在您的webapp的「lib」中放入「gwt-servlet.jar」。如果您嘗試一下我的建議,並發現它適用於您,那麼請告訴我,我將編輯我的答案以便更加精確。

+0

我使用的是tomcat的一個非常舊的版本,但是IIRC它按字母順序掃描罐子名稱。也許現在已經改變了。 –

+0

這可能是這種情況,雖然你不能保證它會一直工作。 –

+0

它並沒有說[這裏[(http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html)),但我懷疑**/WEB-INF/lib/*。你的web應用程序的jar將意味着任何東西,但字母順序。 –

0

要解決這個問題bug你應該在你的類路徑中設置GWT之前的gquery-dnd-bundle-1.0.4.jar。在項目屬性中使用Eclipse請訪問Java構建路徑/訂購導出並確保gquery lib位於GWT之前。

無論如何,您可能還有其他問題,因爲gquery-dnd-bundle-1.0.4.jar與GWT 2.3.x兼容,並且您使用的是GWT 2.4。在新版本的dnd-bundle之前,您可以使用enhance-plugin-1.0.2.jar(包含免打擾包)和gwtquery-1.1.0-SNAPSHOT.jar

您還應該看看GWT 2.4中添加的本機拖放支持。文檔很少,但我發現這個example(您可以從右側拖動模板並將它們放在任務詳細信息中)以及相關的source code。(來自post的信息)

相關問題