Proguard导致org.hibernate.AnnotationException

时间:2017-02-03 06:34:02

标签: proguard ejb-3.0 obfuscation wildfly-10

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

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

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

这个b.a是混淆代码原始名称不同。

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

1 个答案:

答案 0 :(得分:0)

EJB使用反射并要求某些类在进行模糊处理时保留其原始名称,方法和注释。要解决您的问题,您需要添加一些规则,例如:

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

使ProGuard不会删除注释,也不会触及使用@Id注释的类。