来自持久性的javajar文件。在eclipse中找不到xml
我的eclipse工作区中有两个maven项目。第一个项目有hibernate实体,应该在第二个项目中使用。我在第二个项目中将其作为依赖项添加为:
<dependency>
<groupId>org.prosolo</groupId>
<artifactId>bigdata.common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
我禁用了工作区解析,所以,bigdata。通用-0.0.1-快照。jar列在Maven依赖项下。此外,我还配置了持久性。要导入此jar文件,请执行以下操作:
<persistence-unit name="entityManager"
transaction-type="RESOURCE_LOCAL">
<jar-file>lib/bigdata.common-0.0.1-SNAPSHOT.jar</jar-file>
但是,当我从eclipse运行project时,由于以下错误,EntityManager无法初始化:
Caused by: java.lang.IllegalArgumentException: File [lib/bigdata.common-0.0.1-SNAPSHOT.jar] referenced by given URL [file:lib/bigdata.common-0.0.1-SNAPSHOT.jar] does not exist
若我从终端运行项目,或者使用绝对路径运行项目,那个么就并没有问题。jar文件,但在Eclipse中仍然存在相对路径问题。在这两种情况下,我都使用maven jetty插件来运行应用程序
我发现了这个bug报告,但似乎没有解决方案
我想知道是否有解决这个问题的方法,或者如果不能使用jar文件,我应该使用什么其他方法来使用其他项目中的hibernate实体进行包扫描
谢谢, 佐兰
# 1 楼答案
[编辑]这个问题已经在Hibernate 5.0.7中解决,请参见HHH-4161
根据最近对HHH-4161的更新,这个问题也发生在Hibernate 5.0.2上,计划在Hibernate 5.0.5中解决
在本期中,I proposed a workaround基于一个自定义扫描程序类,该类管理相对URL并将其绝对化。我将AbstractScannerImpl源代码复制到测试中。MyCustomScanner,添加了StandardScanner的构造函数,并在环境中添加了以下代码。getNonRootUrls()循环:
其精神与Lauri Harpf的pull请求(https://github.com/hibernate/hibernate-orm/pull/889/files)相同,但优先权被赋予相对URL,并使用相对URL测试而不是异常捕获机制
这种方法的风险在于,所有非根URL都以相同的方式管理,而不仅仅是
<jar-file>
标记的URL。因此,可能会出现副作用。 然后将自定义扫描程序添加到持久性中。xml:运行时,执行日志不会显示任何异常,只会引发一个问题,即
MyEntity
表不存在,这表明实体不存在。jar已正确处理:我在前一位客户中使用的另一种解决方法是,在构建时基于应用程序类路径中JAR的依赖关系构建
<class>
标记列表。乍一看,它看起来有点复杂,但它对应用程序提供了很好的控制:开发人员可以查看持久性。xml来立即知道运行时将加载哪些实体类。请注意,这种方法是在2007年使用的,远远早于我考虑定制扫描仪的解决方案