Eclipse,QueryDSL和Spring Roo一起工作?

时间:2012-11-16 16:34:21

标签: java maven jpa spring-roo querydsl

我正在尝试在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吗?

谢谢,

埃里克

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

关于这个主题的旧讨论,其中Ken Rimple表示“我无法使用预先构建的ITD在QueryDSL生成器上工作。因为实际的类没有@Entity(直到AspectJ编译器进来并添加它当QueryDSL生成代码时,它不会将它们视为实体。“

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

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