我正在尝试在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吗?
谢谢,
埃里克
答案 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使用插件(生命周期阶段)的顺序来尝试调整。