Search code examples
exceptionfactoryobjectdb

What do I need to keep in Proguard to run ObjectDB?


I am using Proguard to minimize the size of my shaded/uber Jar. This was working great until I included a dependency on ObjectDB. What do I need to keep to make ObjectDB work?

I am getting the following output when calling Persistence.createEntityManagerFactory().

javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver log
WARNING: javax.persistence.spi::No valid providers found using:
javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver log
WARNING: javax.persistence.spi::com.objectdb.jpa.Provider - jar:file:/C:/Documents/JProjects/TimeClock/target/TimeClock-1.5.0.jar!/META-INF/services/javax.persistence.spi.PersistenceProvider

javax.persistence.PersistenceException: No Persistence provider for EntityManager named db.odb
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)

Solution

  • Use the following Proguard option:

    -keep class com.objectdb.jpa.Provider {<fields>; <methods>;}