当前位置: 首页 > 面试题库 >

使用maven-processor-plugin生成JPA元模型文件-重新生成的便捷方法是什么?

吴均
2023-03-14
问题内容

我试图使用maven-processor-plugin生成JPA元模型Java文件,并按如下所示设置pom.xml。

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <compilerArgument>-proc:none</compilerArgument>
        </configuration>
    </plugin>
    <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>
                    <!-- source output directory -->
                    <outputDirectory>${basedir}/src/main/java</outputDirectory>
                    <processors>
                        <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                    </processors>
                    <overwrite>true</overwrite>
                </configuration>
            </execution>
        </executions>
    </plugin>

实际上,我想将元模型文件(Entity_.java)生成为其相应实体(Entity.java)的相同包。因此,我在插件中将outputDirectory设置为

<outputDirectory>${basedir}/src/main/java</outputDirectory>

第一次运行是可以的,但是从以后执行元模型Java文件重新生成时,该插件始终会发现有关文件复制的错误。

我的问题是-有什么方法可以配置插件,以便在重新生成过程中覆盖现有文件?

实际上,要变通

  1. 重新生成之前,我必须删除所有生成的文件。
  2. 我可以将outputDirectory指向/ target中的其他文件夹,该位置在每次Maven运行时都将是干净的,但这会导致将生成的元模型文件手动复制到源文件夹,以便在重新生成后进行更新。

两者都很不方便,我希望你们能为我提供适当的解决方案。


问题答案:

正确的解决方案是,生成的源应该位于目标文件夹中,并且不应放入源文件夹或SCM系统中。

当然,通过将生成的源代码放置到目标中,您将在IDE中遇到问题,因为找不到相关的代码。因此,您可以添加build-helper-maven-
plugin以从目标目录动态添加文件夹。

<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>
                <!-- source output directory -->
                <outputDirectory>${project.build.directory}/generated-sources/java/jpametamodel</outputDirectory>
                <processors>
                    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                </processors>
                <overwrite>true</overwrite>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/java/jpametamodel</source>
                </sources>
            </configuration>
        </execution>
    </executions>
 </plugin>


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

  • 我想知道如何使用Maven和Eclipselink 2.5生成静态元模型。通过将这些行添加到pom中,它工作得很好。运行Eclipselink 2.4时使用xml。 但2.4版之后似乎发生了一些变化,原因如下: 你们能帮帮我吗 B. R.

  • 我试图在maven构建期间生成swagger.json文件。 这是我在pom.xml中从docs获得的插件。 任何帮助都将不胜感激。

  • 我正在使用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中的错误 。

  • 以下是我在pom中的相关配置.xml: 提前感谢您的帮助。