天天看点

解决Opentaps/OFBiz在Eclipse启动时"Could not load VFS configuration"的问题

在命令行使用./startofbiz.sh启动Opentaps正常, 而在Eclipse中启动时出现异常,异常信息如下:

网络上(包括Opentaps论坛与OFBiz Mailing Lists)所提供的解决方案是在Opentaps中禁用vfs和webslinger,即把\framework\base\config\ofbiz-containers.xml中以下两行注释掉:

这种解决方案能够使Opentaps启动成功,但是实际上在Opentaps真正需要使用到vfs与webslinger就显得非常无能为力.

根据异常信息分析,原因有可能是重复加载了vfs-providers.xml(定义URL scheme为ofbiz-home的Provider).经过调试证实了笔者的猜测,在实例化org.apache.commons.vfs.impl.StandardFileSystemManager后,会调用其init方法来初始化,在init方法中调用了configurePlugins方法,以下为configurePlugins方法的代码:

在此段代码设置断点,发现%OPENTAPS_HOME%/bin/META-INF/vfs-providers.xml被加载了两次,同时抛出了异常,这正是问题所在.那么vfs-providers.xml为什么会被加载两次,请看以下代码:

java.lang.ClassLoader :

推断出vfs-providers.xml在Parent ClassLoader中被加载后,又被Current ClassCloader加载.从ClassLoder方面再深入的分析就太费时间精力了,毕竟只是在Eclipse才有这个问题.有更快速方便的方法,就是修改StandardFileSystemManager.

在Opentaps根目录新建目录debug-in-eclipse-hack/src,在Eclipse中设置为源代码目录,把StandardFileSystemManager根据包路径拷贝进去,修改configurePlugins方法,代码如下.

Opentaps启动时新的StandardFileSystemManager类会被加载.

修改的代码会把重复的vfs-providers.xml去掉,从而解决问题.

好了,现在重新在Eclipse中启动Opentaps.如果还出现同样的问题,则把framework/webslinger/build/lib/ofbiz-webslinger.jar删除就可解决问题.