控制在类路径中加载JAR的顺序

时间:2011-10-06 16:55:52

标签: java gwt classpath

我正在使用GWT 2.4和gquery-dnd-bundle 1.0.4,这样我就可以使用拖放节点构建树。我遇到了一个恼人的错误(http://code.google.com/p/gwtquery-plugins/issues/detail?id=6)。它的要点是我需要保证文件“gquery-dnd-bundle-1.0.4.jar”在运行时在我的WEB-INF / lib目录中的gwt-servlet.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

2 个答案:

答案 0 :(得分: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. 将“gquery-dnd-bundle-1.0.4.jar”文件保留在WAR中。
  3. 这样,首先将“gwt-servlet.jar”加载到CLASSPATH中,然后加载“gquery-dnd-bundle-1.0.4.jar”......覆盖“gwt-中的任何冲突类”的servlet.jar”。

    如果您正在使用其他应用服务器,那么服务器级“lib”目录将会有所不同......但基本思路是优先级较低的JAR需要进入应用服务器的“lib”,而优先级较高的JAR需要保留在webapp的“lib”中。

    这不是世界上最干净的情况,但它会保证你想要的结果。

    更新:您知道,在仔细考虑并重新阅读Tomcat文档之后,我可能实际上已经落后了。您可能需要在您的应用服务器“lib”中添加“gquery-dnd-bundle-1.0.4.jar”,并在您的webapp的“lib”中添加“gwt-servlet.jar”。如果您尝试我的建议并发现它对您有一种方法而不是另一种方法,请告诉我,我会编辑我的答案以更精确。

答案 1 :(得分: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(包含DND包)和gwtquery-1.1.0-SNAPSHOT.jar

您还应该查看GWT 2.4中添加的本机拖放支持。文档很少,但我发现了这个example(您可以从右侧拖动模板并将其放入任务详细信息中),以及相关的source code。 (来自此post的信息)