如何使用 Hibernate JPA 2 元模型生成器?

How to use Hibernate JPA 2 Metamodel Generator?

当我根据 http://docs.jboss.org/hibernate/stable/jpamodelgen/reference/en-US/html_single/ 学习 Hibernate JPA 2 元模型生成器时,它工作正常。
但是当我尝试通过 运行 [=11= 生成这些元模型时], 它只在目标文件夹中生成了对应的类和一个奇怪的文件夹'generated-sources',并没有在源文件夹中生成对应的java文件。

下面是我在pom.xml中的相关配置:

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <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>
    <version>3.2.0</version>
    <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>
</plugin>
</plugins>


所以,我的问题是:这是预期的行为吗?如果是,是否意味着我每次使用元模型之前都需要编译代码?如果不是,我如何在源代码文件夹中生成 java 个文件?

提前感谢您的帮助。

But when I tried to generate these metamodel by run mvn compile, it only generated corresponding classes and a strange folder 'generated-sources' in target folder as below and does not generated corresponding java files in source folder.

生成的元 classes 的默认文件夹是 ${project.build.directory}/generated-sources/apt,其中 ${project.build.directory} 默认为 target。所以生成的 meta classes 应该在 target/generated-sources/apt 目录下(我可以从你的截图中猜到生成了 meta classes)。

如果您想更改此行为,您可以配置插件以使用 outputDirectory 元素将元 classes 生成到另一个文件夹,如下所示:

<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id>process</id>
        <goals>
            <goal>process</goal>
        </goals>
        <phase>generate-sources</phase>
        <configuration>
            <processors>
                <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
            </processors>
             <outputDirectory>${project.basedir}/generated</outputDirectory>
        </configuration>
    </execution>
</executions>

并且不要忘记将新文件夹添加到您的 class 路径中,否则您的项目可能无法构建。

is this expected behavior?

If yes, does it mean that I need to compile code before I use metamodel each time?

是的,但如果您不更改或添加新实体,您可以使用生成的 classes,前提是您 运行 mvn compile 至少一次。

If no, how can I generate java files in source code folder?

我不建议这样做 :-) 我的意思是将生成的 classes 与源代码混合不是一个好主意。如果您不喜欢 target 文件夹,请使用上述任何其他文件夹。