Proguard 导致 org.hibernate.AnnotationException

Proguard causes org.hibernate.AnnotationException

这是我第一次使用混淆器 (ProGuard) 来混淆我的代码。我有两个 J2EE 项目 EJB 和 webProject。目前我只混淆了我的 EJB.jar 项目,它也托管网络服务,但在我到达那部分之前我收到一个错误

我使用 ProGuard GUI 应用程序成功生成了输出 jar,但是当我在我的服务器 (wildfly) 上部署该 jar 时,它给了我这个异常:

org.hibernate.AnnotationException: No identifier specified for entity: com.metadatatool.b.a 

b.a为混淆码原名不同

这个异常基本上是在一个实体上调用的,即一个视图,它有一个 @Id 标识符,如果我不混淆我的代码,它会正常工作,但当我这样做时,它会给我这个错误。 我正在使用 ProGuard 的 -keep attributes 功能,但我仍然收到此错误

EJB 使用反射,并要求某些类 在经过混淆时保留其原始名称、方法和注释。要解决您的问题,您需要添加一些规则,例如:

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

使 ProGuard 不去除注释并且不触摸使用 @Id 注释的 类。