GWT web-app与动态加载类的系统类路径

在我的GWT Web应用程序中,我将所有jar文件保存在项目之外,并使用类路径变量引用它们。 这允许我链接到其他项目/团队的jar,而不必将jar的副本放在我的web app lib目录中。 托管模式请在此系统类路径中查找类,然后将它们添加到web-app类路径中,警告我它正在这样做。 当我部署我的构建系统时,只需要在我的Web应用程序中运送我需要的jar子,这不是问题。

我遇到的问题是一些代码使用动态查找,在类路径中搜索实现。 如果尚未将jar添加到Web应用程序类路径中,则由于尚未从jar中加载任何类,因此它不包含在搜索中。

我遇到的特殊问题是持久性 – 它通过搜索META-INF / services文件来查找EntityManagerFactory实现。 我对罗马及其模块扩展也有类似的问题。

我有一个解决方法,在开发/托管模式中,我只是引用一个我知道在我想要的jar中的类,这会导致它被添加到我的web应用程序类路径中。 我通过电话来做这件事

private void devModeClassPathHack() { Class gwtDevModeHack1 = EntityManagerImpl.class; } 

从我的开发模式Guice模块。

我的问题很简单 – 这样做有“更好”的方法吗?

我不认为,有一个更好的方法 – 使用GWT Jetty / dev模式的临时“自我修复”机制已经是一个黑客:)如果您需要在开发过程中运行服务器端代码,例如JBoss (与客户端的GWT开发模式一起),这将停止工作。

(作为一个额外的问题,类加载的顺序 – 以及因此在不同jar中有多个版本的类的情况下的优先级 – 将取决于程序流。这可能非常讨厌调试。)

你提到,你从外面拉进了所有的jar子。 在这种情况下,我要做的是在WEB-INF / lib目录中将.svnignore(或.gitignore / …)设置为“* .jar”。 然后我将运行相同的构建步骤,该步骤用于创建生成构建,以在启动服务器之前将jar复制到lib目录中。