web-dev-qa-db-fra.com

Génération de métamodèles Eclipselink 2.5 à l'aide de Maven

J'aimerais savoir comment générer des métamodèles statiques à l'aide de Maven et d'Eclipselink 2.5. Cela a bien fonctionné en ajoutant ces lignes à pom.xml lors de l'exécution d'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>

Mais il semble que quelque chose a changé depuis la version 2.4 car je reçois l'erreur suivante:

[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)

Pouvez-vous m'aider? =)

B.R

17
kungcc

Il semble qu'ils aient déplacé la classe CanonicalModelProcessor vers son propre artefact maven:

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

La configuration suivante du plug-in maven-processor-plugin fonctionne pour moi:

        <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>

Note très importante : le métamodèle est généré uniquement si les entités sont déclarées dans l'unité de persistance. Cela ne fonctionne pas avec les entités découvertes.

19
dschoorl

Pour simplifier la configuration, je vous recommande de tester: https://github.com/ethlo/eclipselink-maven-plugin . Vous ne serez même pas obligé de conserver un fichier persistence.xml mis à jour.

<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>

Note: je suis l'auteur du plugin.

4
Morten Haraldsen

Pour moi, utiliser maven-compiler-plugin à partir de org.Apache.maven.plugins a donné MojoFailureException lorsque vous utilisez une commande autre que mvn clean install.

Le teste les solutions avec org.Eclipse.persistence.jpa.modelgen.processor 2.6.0.

La configuration dans les deux cas est assez similaire.

Le problème principal que j'avais avec org.bsc.maven était de configurer correctement les parties compilerArguments. C'est pourquoi je poste (les deux) les solutions ci-dessous.

La documentation est disponible: ICI .


Solution utilisant maven-compiler-plugin à partir de org.bsc.maven

_ {Pour moi celui-ci a fonctionné mieux} _

<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>

Solution utilisant maven-compiler-plugin à partir 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>
2
Atais

MISE À JOUR 2017:

La réponse principale à cette question est maintenant obsolète. Vous devez maintenant suivre les étapes suivantes pour que cela fonctionne.

1) Importez la dépendance requise:

<!-- 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) Spécifiez l’emplacement persistence.xml (il s’agit d’une solution de contournement pour un bogue EL. Veuillez noter que votre chemin peut varier de celui spécifié dans cet exemple):

<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) Pour finir, reportez-vous à l’article suivant afin de déclencher l’exécution avec les nouveaux mappages Lifecycle de Maven: Utilisation de maven Build Helper Maven Plugin

0
TBuc

vous êtes susceptible d'obtenir l'erreur suivante:

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

En raison du bogue non résolu la compilation est cassée, le fichier jar modelgen est signé dans le référentiel maven , la version doit être définie sur 2.5.0-SNAPSHOT pour l'instant.

0
coolnodje