在其中有一个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
答案 0 :(得分:0)
该解决方案正在添加:-keepdirectories