这是我第一次使用混淆器(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
功能,但我仍然收到此错误
答案 0 :(得分:0)
EJB使用反射并要求某些类在进行模糊处理时保留其原始名称,方法和注释。要解决您的问题,您需要添加一些规则,例如:
-keepattributes RuntimeVisibleAnnotations
-keep @javax.persistence.* class * {
*;
}
使ProGuard不会删除注释,也不会触及使用@Id
注释的类。