3

我正在尝试在 Eclipse 中使用 QueryDSL 设置基于 maven 的 SpringRoo 项目,并且在启用 Roo 时似乎无法使生成器工作。如果我创建一个普通项目,并使用必要的 querydsl 插件/依赖项填充我的 pom.xml,我的元模型类会自动生成。

但是,如果我切换到基本的 ROO 项目,并添加必要的 querydsl 插件/依赖项,则不会生成元模型类。

这些是我在 pom.xml 中添加的内容:

<!-- Querydsl -->
<dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-core</artifactId>
    <version>${querydsl.version}</version>
</dependency>
<dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>${querydsl.version}</version>
</dependency>
<dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>${querydsl.version}</version>
</dependency>

    <plugin>
        <!-- Requires mysema m2e plugin (http://ilx.github.com/m2e-querydsl/repository/0.0.5/) -->
        <groupId>com.mysema.maven</groupId>
        <artifactId>maven-apt-plugin</artifactId>
        <version>1.0.4</version>
        <executions>
            <execution>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                    <logOnlyOnError>true</logOnlyOnError>
                    <outputDirectory>target/generated-sources/apt</outputDirectory>
                    <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                </configuration>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>com.mysema.querydsl</groupId>
                <artifactId>querydsl-apt</artifactId>
                <version>${querydsl.version}</version>
            </dependency>
            <dependency>
                <groupId>com.mysema.querydsl</groupId>
                <artifactId>querydsl-jpa</artifactId>
                <classifier>apt</classifier>
                <version>${querydsl.version}</version>
            </dependency>
        </dependencies>
    </plugin>
    <!-- right now this seems needed -->

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
                <id>add-source</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>target/generated-sources/apt</source>
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>

我正在使用 Eclipse 3.7、m2e 1.2、Java 6。我还从http://ilx.github.com/m2e-querydsl/repository/0.0.5/安装了 mysema m2e 插件。

有没有人有一个有效的 Roo 和 QueryDSL 配置?如果是这样,你能分享你的 pom.xml 吗?

谢谢,

埃里克

4

3 回答 3

2

com.mysema.query.apt.jpa.JPAAnnotationProcessor 需要 javax.persistence.Entity 注释的 Java 文件。如果在运行时使用其他注解或添加实体注解,则不会生成任何类。

请参阅 Querydsl 参考文档的本章,了解基于类加载器的代码生成作为 APT 的替代方法http://www.querydsl.com/static/querydsl/2.8.2/reference/html/ch03s02.html

于 2012-11-17T12:51:39.730 回答
1

出于某种我不明白的原因,我需要在我的 pom.xml 中添加一个 spring-tx 依赖项。一旦到位,元模型类就会自动生成。但是有一个警告,我需要使用 @Entity 手动注释我的实体,而不是依赖 Roo 通过方面对其进行注释。最后,将我的插件更新到 1.0.7 消除了使用 maven-build-helper 的需要。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>


        <!-- QueryDSL plugin -->
        <plugin>
        <!-- Requires mysema m2e plugin (http://ilx.github.com/m2e-querydsl/repository/0.0.5/) -->
        <groupId>com.mysema.maven</groupId>
        <artifactId>apt-maven-plugin</artifactId>
        <version>1.0.7</version>
        <executions>
            <execution>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                    <outputDirectory>target/generated-sources/apt</outputDirectory>
                    <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                </configuration>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>com.mysema.querydsl</groupId>
                <artifactId>querydsl-apt</artifactId>
                <version>${querydsl.version}</version>
            </dependency>
            <dependency>
                <groupId>com.mysema.querydsl</groupId>
                <artifactId>querydsl-jpa</artifactId>
                <classifier>apt</classifier>
                <version>${querydsl.version}</version>
            </dependency>
        </dependencies>
    </plugin>

示例 Java Bean:

@RooJavaBean
@RooToString
@RooJpaEntity
@Entity
public class Client {
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "M-")
    private Date created_on;
    private String name;
}
于 2012-11-21T16:05:11.780 回答
0

有关于这个主题的旧讨论,Ken Rimple 指出“我在使用预构建的 ITD 的 QueryDSL 生成器上遇到任何问题。因为实际的类上没有 @Entity(直到 AspectJ 编译器出现)并添加它)当 QueryDSL 生成代码时,它不会将它们视为实体。”

http://www.manning-sandbox.com/thread.jspa?threadID=51012&tstart=15

对我来说,这似乎是一个可以尝试通过改变 maven 使用插件的顺序(生命周期阶段)来调整的东西。

于 2013-01-24T11:22:45.830 回答