【发布时间】:2011-07-13 09:25:45
【问题描述】:
这是一个我已经困扰了几个小时的问题,现在我感到非常绝望。 我将我们的应用程序从 Spring 2.5/Hiberante 3.3 迁移到 Spring 3.0.5/Hibernate 3.6。已完成以下操作:
- 更新了 spring 依赖项/版本(现在不仅仅是几个依赖项)
- 更新了 Hibernate 依赖项/版本
- 根据“schemaLocation”的版本更新了 Spring 上下文 XML 文件
在不同的小修复和调整后,我从 Eclipse IDE 启动时仍然遇到的错误如下:
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx]
我查看了其他线程,并意识到当在类路径中找不到特定的库(在本例中为 spring-tx)时会出现这样的问题,但我在我的 Maven 依赖项中清楚地看到它。
接下来,我像以前的版本一样构建了 WAR,将其部署在 Tomcat 上,应用运行良好!
由此我可以得出结论,Eclipse 环境配置中缺少某些内容。有趣的是,所有的抱怨都是关于 spring-tx,当我使用 tx 命名空间删除单行时
<tx:annotation-driven transaction-manager="transactionManager" />
.. 应用程序启动正常,没有抱怨其他命名空间(当然,它没有正常工作,但至少在初始化期间没有抱怨)。
关于我的 IDE/项目设置的一些总结:
- 由 GWT .launch 文件(GWT 版本 2.0.3)执行应用程序启动
- 在这个启动文件中有对其他项目的引用,包括具有 spring 依赖项的服务器端
- 事实上,这个 gwt-client 项目有 serverside POM 作为父级,因此我在这个项目的 Maven 依赖项中看到了所有 spring 依赖项
- GWT-client 项目有 /war/WEB-INF/applicationContext.xml 导入其他上下文 XML 资源,实际上是在使用 spring-tx
正式的问题是:从 IDE 启动的项目在迁移到 Spring 3x 后出现此类错误的可能原因是什么(并且可以正常部署为构建的 WAR)?
我不希望得到直接的答案(除非有人遇到完全相同的环境和问题),但指南、建议会很有帮助!
编辑 忘了提一下,在从 IDE 启动应用程序时,我有一堆这样的警告:
[WARN] Server class 'javax.persistence.EntityManagerFactory' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/D:/maven/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/D:/maven/repository/org/springframework/spring-orm/3.0.5.RELEASE/spring-orm-3.0.5.RELEASE.jar' to the web app classpath for this session
.. 所以也许 spring-tx 也没有在 web-app 中找到(并且在系统类路径中找到),但它没有像其他人那样添加?这种行为的原因是什么?
【问题讨论】:
-
我在 GWT Google Group 上找到了以下帖子:groups.google.com/group/google-web-toolkit/browse_thread/thread/…
-
(.. 继续之前我无法编辑的未完成评论) 我在 GWT Google Group 上找到了以下主题:groups.google.com/group/google-web-toolkit/browse_thread/thread/…,之后我意识到可以应用以下解决方法:复制spring-tx-3.0.5.RELEASE.jar(这是我的情况)到/war/WEB-INF/lib。而且效果很好!但我仍然将其归类为一种解决方法,并且想知道在从 IDE 启动基于 Maven 的 GWT 应用程序时如何确保一致的类路径解析。
-
当您构建 WAR 并部署到 Tomcat 时,它是 Maven 构建还是来自您的 IDE?尝试从您的 IDE 生成 WAR(右键单击 -> 导出 -> WAR)。然后解压缩或使用例如查看内部7-Zip 看看 Spring-Tx jar 是不是在打仗。然后我们知道 Eclipse 配置有问题。此外,请查看 Eclipse 中项目的构建路径设置。有 Spring-Tx 吗? Maven 是生成了您的 Eclipse 项目文件,还是您手动生成了?也许使用
mvn eclipse:clean eclipse:eclipse重新生成 Eclipse 项目文件。