1

我正在编写休眠 dto-mapping osgi 包(用于 glassfish),并且该包没有从类路径中看到资源。

清单文件:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Model
Bundle-SymbolicName: com.test.spm.model
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.test.spm.model.Activator
Bundle-Vendor: TEST
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.osgi.framework;version="1.3.0"
Require-Bundle: org.hibernate.core;bundle-version="4.1.7"
Export-Package: com.test.spm.model,
 com.test.spm.model.dto,
 com.test.spm.model.dto.base,
 com.test.spm.model.util
Bundle-ClassPath: .,
 lib/sqljdbc4.jar

无法从 sqljdbc4.jar 访问文件,错误:

Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.microsoft.sqlserver.jdbc.SQLServerDriver

但是这个库存在于导出的 jar 文件中。

我也无法通过类路径访问休眠配置文件和映射文件(找不到类和资源也找不到异常)。但是下一个代码有效:

            sessionFactory = new Configuration().configure(HibernateUtil.class.getClassLoader().getResource("hibernate.cfg.xml"))
                    .addURL(HibernateUtil.class.getClassLoader().getResource("mapping/Project.hmb.xml"))
                    .buildSessionFactory();

我试图调用

System.out.println(HibernateUtil.class.getClassLoader().getResource("hibernate.cfg.xml")); 

并在 sys out 中看到这个:

bundle://376.0:1/hibernate.cfg.xml

谷歌搜索捆绑类路径选项,但我的清单似乎没问题。我需要一些特定的包类路径属性来让我的包看到类路径资源,还是什么?感谢您的帮助!

4

1 回答 1

3

除了包含 jar 库的包之外,Hibernate 无法在其他包中找到任何资源。Hibernate 不知道 OSGI 清单文件并忽略它们,因此您的清单文件是否正确并不重要。

在此线程中查看我的答案,我在那里提供的解决方案也应该适用于您的问题。

于 2012-09-21T09:34:37.433 回答