混淆的jar中的JPA实体未由Hibernate找到/加载

问题描述 投票:1回答:1

在一个具有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

spring-boot jpa proguard
1个回答
0
投票

解决方案正在添加:-keepdirectories

© www.soinside.com 2019 - 2024. All rights reserved.