我有基于 Hibernate 和 Spring(编程配置)的 web 项目。Hibernate 映射在一个包中提供,该包归档在一个 JAR 中。
在初始化会话工厂时,我曾经调用过:
sessionFactory.
setMappingDirectoryLocations(new Resource[]{
new ClassPathResource("org/all/theway/to/hibernatemappings")});
为了告诉 Hibernate 在哪里寻找映射文件。“org/all/theway/to/hibernatemappings”是包含 hbm.xml 文件的包。这在 Eclipse(GWT 开发模式)中运行良好,因为包含映射的项目也被检出并链接到我的 Web 项目。但是,一旦我创建了一个战争并将其部署到 Tomcat,它就无法获取类路径资源。
Spring 的 ClasspathResource javadoc 暗示了这一点:“如果类路径资源驻留在文件系统中,则支持解析为 java.io.File,但不支持 JAR 中的资源。始终支持解析为 URL。 ”
但是该怎么做呢?我也可以改用 setMappingJarLocation,但我不喜欢在 Spring 上下文中硬编码 jar 文件名。此外,当我尝试它时,它也只能在 IDE 中工作,但在 Tomcat 中,相同的文件路径(WEB-INF/lib/file.jar)不起作用。这也让我相信这将是一个丑陋的解决方案。
有没有不使用 jar 文件的解决方法?