【问题标题】:How to use Hibernate JPA 2 Metamodel Generator?如何使用 Hibernate JPA 2 元模型生成器?
【发布时间】:2017-11-27 23:13:23
【问题描述】:

    当我根据http://docs.jboss.org/hibernate/stable/jpamodelgen/reference/en-US/html_single/学习Hibernate JPA 2 Metamodel Generator时,它工作正常。
    但是当我尝试通过运行mvn compile生成这些元模型时,它只生成了相应的类和一个奇怪的文件夹' generate-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 文件?

提前感谢您的帮助。

【问题讨论】:

    标签: java hibernate maven jpa-2.0


    【解决方案1】:

    但是当我尝试通过运行 mvn compile 生成这些元模型时,它只在目标文件夹中生成了相应的类和一个奇怪的文件夹“生成源”,如下所示,并没有在源文件夹中生成相应的 java 文件。

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

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

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

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

    这是预期的行为吗?

    是的

    如果是,是不是每次使用元模型之前都需要编译代码?

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

    如果没有,如何在源代码文件夹中生成 java 文件?

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

    【讨论】:

    • 元类确实是在target/generated-sources/apt中生成的。但它们也在 target/classes 文件夹中生成。这意味着在两个文件夹中生成相同的元类。这是预期的行为吗?
    • 除非你有一些你没有发布的东西,根据你发布的配置应该是不可能的。但是编译的类应该在target/classes下;源代码不应该在那里,即源类,例如,像 MyEntity_.java 转到 generated-sources 文件夹,而像 MyEntity_.class 这样的编译类将在target/classes 文件夹下。
    • 感谢您的回复。真的很有帮助。
    • @Xiaoyuan ,你的问题解决了吗?这个答案可以接受吗?
    • @ДмитрийКулешов,是的,你有问题吗?事实上,我没有遇到任何问题。正如我上面提到的,我只是混淆了它的行为。
    猜你喜欢
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多