Hibernate无法找到/加载混淆的jar中的JPA实体

时间:2019-02-07 23:18:34

标签: spring-boot jpa proguard

在其中有一个Spring Boot应用程序,其中的JPA实体A与包含在混淆的jar中的实体B有关系。

在Hibernate初始化时,我在A上遇到了常见的“ @OneToOne或@ManyToOne引用未知实体:B”错误。

当我用Proguard对jar进行混淆时,将严格产生该错误。

在我的proguard配置中,我已经使用它来保留所有持久性注释类和运行时注释:

-keepattributes RuntimeVisibleAnnotations
-keep @javax.persistence.* class * {
   *;
}

如果我反编译代码,我会看到JPA批注存在,但是仍然找不到该实体。

我还尝试过这样保存整个实体:

-keep class B

但是错误仍然存​​在。我不知道Proguard在jar中所做的其他更改会阻止Hibernate查找该实体。

在Spring Boot中,顺便说一句,我正在使用@EntityScan和显式包名称。


更新解决方案

解决方案是添加:

-keepdirectories 

在混淆处理中,默认情况下会删除目录条目,以减小输出jar的大小。没有目录,Spring Boot无法找到配置了路径扫描的实体。

报告了类似的问题,并在此处回答: ProGuard : Obfuscated jar is not working but un-obfuscated jar is working

1 个答案:

答案 0 :(得分:0)

该解决方案正在添加:-keepdirectories