persistenceprovider org maven jpa eclipselink

org - maven persistence jpa



Eclipselink 2.5 Metamodel Generation utilizando Maven (7)

ACTUALIZACIÓN 2017:

La respuesta principal a esta pregunta ahora está desactualizada. Ahora necesita realizar los siguientes pasos para que funcione.

1) Importar la dependencia requerida:

<!-- https://mvnrepository.com/artifact/org.eclipse.persistence/org.eclipse.persistence.jpa.modelgen.processor --> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.2</version> <scope>compile</scope> </dependency>

2) Especifique la ubicación persistence.xml (esta es una solución para un error EL. Tenga en cuenta que su ruta puede variar de la especificada en este ejemplo):

<build> <pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> [...] </executions> <configuration> <source>1.7</source> <target>1.7</target> <compilerArgs> <arg>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</arg> </compilerArgs> </configuration> </plugins> [...] </pluginManagement> [...] </build>

3) Finalmente, consulte el siguiente elemento para desencadenar la ejecución con las nuevas Asignaciones de ciclo de vida de Maven: Uso de Maven.

Me gustaría saber cómo generar metamodelos estáticos utilizando Maven y Eclipselink 2.5. Funcionó bien agregando estas líneas a pom.xml al ejecutar Eclipselink 2.4.

// Generate meta model for eclipselink 2.4 (does not work for 2.5) <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <version>1.3.1</version> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <compilerArguments>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</compilerArguments> <processors> <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor> </processors> <outputDirectory>${project.build.directory}/generated-sources/meta-model</outputDirectory> </configuration> </execution> </executions> </plugin>

Pero parece que algo ha cambiado desde 2.4 porque me aparece el siguiente error:

[INFO] javac option: -proc:only [INFO] javac option: -Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml [INFO] javac option: -processor [INFO] javac option: org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor [INFO] javac option: -s [INFO] javac option: /home/asdf/target/generated-sources/meta-model [INFO] diagnostic error: Annotation processor ''org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor'' not found [INFO] diagnostic warning: Annotation processing without compilation requested but no processors were found. [ERROR] execute error java.lang.Exception: error during compilation at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.executeWithExceptionsHandled(AbstractAnnotationProcessorMojo.java:183) at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.execute(AbstractAnnotationProcessorMojo.java:96) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

¿Pueden ustedes ayudarme? =)

BR


Esto es lo que usé

<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.5.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.1</version> <scope>provided</scope> </dependency> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> <compilerArguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerArguments> </configuration> <executions> <execution> <id>generate-entity-metamodel</id> <phase>generate-sources</phase> <goals> <goal> compile </goal> </goals> <configuration> <source>1.6</source> <target>1.6</target> <optimize>true</optimize> <showDeprecation>true</showDeprecation> <showWarnings>true</showWarnings> <proc>only</proc> <!--<compilerArgument>-Aeclipselink.metamodel=true</compilerArgument> <generatedSourcesDirectory>${basedir}/src/main/java</generatedSourcesDirectory>--> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.8</version> <executions> <execution> <id>add-modelgen-generated-sources-directory</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/target/generated-sources/annotations</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>

la parte de add-sources es para que netbeans 8 lo entienda para ponerlo en classpath :)


Para hacer la configuración mucho más sencilla, te recomendaría que pruebes: https://github.com/ethlo/eclipselink-maven-plugin . Ni siquiera se le pedirá que mantenga un archivo persistence.xml actualizado.

<plugin> <groupId>com.ethlo.persistence.tools</groupId> <artifactId>eclipselink-maven-plugin</artifactId> <version>[version]</version> <executions> <execution> <id>weave</id> <phase>process-classes</phase> <goals> <goal>weave</goal> </goals> </execution> <execution> <id>modelgen</id> <phase>generate-sources</phase> <goals> <goal>modelgen</goal> </goals> </execution> </executions> </plugin>

Nota: Soy el autor del plugin.


Para mí, usar maven-compiler-plugin de org.apache.maven.plugins resultó en la MojoFailureException cuando MojoFailureException otro comando que mvn clean install sea mvn clean install .

Las soluciones probadas con org.eclipse.persistence.jpa.modelgen.processor 2.6.0 .

La configuración en ambos casos es bastante similar.

El problema principal que tuve con org.bsc.maven fue configurar correctamente las partes compilerArguments . Es por eso que publico (ambas) las soluciones a continuación.

La documentación está disponible: HERE .

Solución utilizando maven-compiler-plugin de org.bsc.maven

Para mi este funciono mejor

<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <executions> <execution> <id>eclipselink-jpa-metamodel</id> <goals> <goal>process</goal> </goals> <configuration> <compilerArguments> -Aeclipselink.persistencexml=${basedir}/src/main/resources/META-INF/persistence.xml </compilerArguments> <processors> <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor </processor> </processors> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>${eclipselink.version}</version> <scope>compile</scope> </dependency> </dependencies> </plugin>

Solución utilizando el maven-compiler-plugin de org.apache.maven.plugins

<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>${eclipselink.version}</version> <scope>compile</scope> </dependency> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> <arg>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</arg> </compilerArgs> </configuration> </plugin>


Parece que han movido la clase CanonicalModelProcessor a su propio artefacto maven:

<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.0</version> </dependency>

La siguiente configuración de maven-processor-plugin me funciona:

<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <version>2.2.4</version> <executions> <execution> <id>eclipselink-jpa-metamodel</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <processors> <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor> </processors> <outputDirectory>${project.build.directory}/generated-sources/meta-model</outputDirectory> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.0</version> <scope>provided</scope> </dependency> </dependencies> </plugin>

Nota muy importante : el metamodelo se genera solo si las entidades se declaran en la unidad de persistencia. No funciona con entidades descubiertas.


es probable que obtenga el siguiente error:

java.lang.RuntimeException: java.lang.SecurityException: class "org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProperties"''s signer information does not match signer information of other classes in the same package

Debido a que la compilación de errores no resueltos está rota, modelgen jar está firmado en el repositorio principal , la versión debe estar establecida en 2.5.0-SNAPSHOT por ahora.


ACTUALIZAR

Por favor, vea esta entrada de blog . Y (O) este repositorio . Seguiré actualizando tanto la entrada como el repositorio.

Por favor, notifíqueme de cualquier manera si hay algún cambio que deba arreglarse.

Hibernar

Hibernate es el más recomendado.

<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <processors> <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </processors> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>4.3.4.Final</version> </dependency> </dependencies> </plugin>

OpenJPA

OpenJPA parece requerir un elemento adicional <openjpa.metamodel>true<openjpa.metamodel> .

<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <processors> <processor>org.apache.openjpa.persistence.meta.AnnotationProcessor6</processor> </processors> <optionMap> <openjpa.metamodel>true</openjpa.metamodel> </optionMap> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.apache.openjpa</groupId> <artifactId>openjpa</artifactId> <version>2.3.0</version> </dependency> </dependencies> </plugin>

EclipseLink

EclipseLink, como se menciona en @dschoorl, requiere persistence.xml con <class/> en ella.

<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <executions> <execution> <id>process</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <processors> <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor> </processors> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.1</version> </dependency> </dependencies> </plugin>