当前位置: 首页 > 知识库问答 >
问题:

使用Maven生成Eclipselink 2.5元模型

贡英华
2023-03-14

我想知道如何使用Maven和Eclipselink 2.5生成静态元模型。通过将这些行添加到pom中,它工作得很好。运行Eclipselink 2.4时使用xml。

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

但2.4版之后似乎发生了一些变化,原因如下:

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

你们能帮帮我吗

B. R.

共有3个答案

柴文林
2023-03-14

为了使配置更简单,我建议您测试:https://github.com/ethlo/eclipselink-maven-plugin.您甚至不需要保持更新的持久性。xml文件。

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

注意:我是插件的作者。

沈俊晤
2023-03-14

对于我来说,使用org上的maven编译器插件。阿帕奇。专家插件在使用除mvn clean install以外的其他命令时导致MojoFailureException

他们用org测试了解决方案。日食坚持不懈jpa。modelgen。处理器2.6。0

这两种情况下的配置非常相似。

我遇到的org.bsc.maven的主要问题是正确配置compilerArguments部分。这就是为什么我在下面发布(两个)解决方案。

文件可在此处查阅。

使用maven编译器插件的解决方案org.bsc.maven

对我来说这个效果更好

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

使用org中的maven编译器插件解决方案。阿帕奇。专家插件

<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>
苏健柏
2023-03-14

似乎他们已经将CanonicalModelProcessor类移动到了它自己的maven工件:

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

以下maven处理器插件配置适合我:

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

非常重要的注意:只有在持久性单元中声明实体时,才会生成元模型。它不适用于已发现的实体。

 类似资料:
  • 我正在使用hibernate jpamodelgen使用maven生成元模型类。 当我运行mvn clean软件包时,它运行良好,没有任何问题。但是如果我第二次运行mvn包(没有clean),我会得到以下异常: 环境: 我pom.xml的片段:

  • 问题内容: 我正在使用hibernate-jpamodelgen使用maven生成元模型类。 当我运行 mvn clean package时 ,它运行正常,没有任何问题。但是,如果我第二次运行 mvn软件包 (没有清理),则会收到以下异常: 环境 : 我的pom.xml中的代码段: 问题答案: 找到答案!… 这是 3.2 和 3.3 版本的 maven-compiler-plugin中的错误 。

  • 问题内容: 我遵循了JPA modelgen 指南,并且能够生成所需的规范元模型。通过此pom设置: 生成的源已在指定目录中正确创建,我必须手动将其指定为eclipse项目类路径中的源才能使用它。当我触发Maven时,日志显示或,并且我仍然可以成功构建。所以我的问题是,在创建元模型时这种预期/正确的行为吗?还是我错过了cofig中的某些内容?谢谢 问题答案: 我也在使用JPA Metamodel

  • 我试图使用ANT生成Eclipse Link JPA元模型 然而,我得到以下错误,这可能是什么原因? 错误的服务配置文件,或在构造处理器对象javax时引发异常。注释。处理。处理者:提供者组织。日食坚持不懈内部的jpa。modelgen。找不到CanonicalModelProcessor

  • 问题内容: 我试图使用maven-processor-plugin生成JPA元模型Java文件,并按如下所示设置pom.xml。 实际上,我想将元模型文件(Entity_.java)生成为其相应实体(Entity.java)的相同包。因此,我在插件中将outputDirectory设置为 第一次运行是可以的,但是从以后执行元模型Java文件重新生成时,该插件始终会发现有关文件复制的错误。 我的问题

  • 我有2个文件,一个ecore实现元模型和一个电子存储库。电子存储库以EMF格式与ecore实现元模型一起提供。我想浏览这个存储库的内容,我所知道的是我必须从实现元模型生成一个Eclipse插件,通过这个插件,我可以打开存储库并浏览它的内容。但我不知道如何生成插件并继续它。 ecore实现元模型是使用Eclipse Indigo SR2中的EMF版本2.7开发的,e-Repository是在相同的环