2 votes

Les entités JPA dans le jar obfusqué ne sont pas trouvées/chargées par Hibernate

Je possède une application Spring Boot, avec une entité JPA A qui a une relation avec une entité B incluse dans un jar obfusqué.

Je reçois l'erreur courante "@OneToOne ou @ManyToOne sur A fait référence à une entité inconnue : B" lorsque Hibernate s'initialise.

L'erreur se produit strictement lorsque j'obfuscate le jar avec Proguard.

Dans ma configuration Proguard, j'utilise déjà ceci pour préserver toutes les classes annotées avec la persistance, et les annotations de runtime:

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

Si je décompile le code, je vois que les annotations JPA sont là mais l'entité n'est toujours pas trouvée.

J'ai également essayé de préserver toute l'entité avec ceci :

-keep class B

Mais l'erreur persiste. Je ne sais pas ce qui est encore modifié par Proguard dans le jar qui empêche Hibernate de trouver l'Entité.

BTW dans Spring Boot j'utilise @EntityScan avec le nom de package explicite.


MISE À JOUR AVEC LA SOLUTION

La solution était d'ajouter :

-keepdirectories 

Les entrées de répertoire sont supprimées par défaut dans le processus d'obfuscation pour réduire la taille du jar de sortie. Sans les répertoires, Spring Boot était incapable de trouver les entités configurées avec le scan du chemin.

Un problème similaire a été signalé et résolu ici : ProGuard : Obfuscated jar is not working but un-obfuscated jar is working

0voto

La solution consiste à ajouter: -keepdirectories

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X