2011-10-06 115 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的信息)