2012-12-18 94 views
4

如何通过仅指定包名来生成QueryDsl Q-Classes? 鉴于源类位于我的目标/ generated-sources文件夹中,因为它们是其他构建插件(WSDL,XSD等)的产品从包中生成QueryDsl Q类

我试过使用以下插件,但无法找到正确的配置:

<groupId>com.mysema.querydsl</groupId> 
<artifactId>querydsl-maven-plugin</artifactId> 
<version>2.9.0</version> 
<executions> 
    <phase>generate-sources</phase> 
    <goals> 
     <goal>process</goal> 
    </goals> 
    <configuration> 
     <outputDirectory>target/generated-sources</outputDirectory> 
     <processor>${com.mysema.query.apt.ProcessorClass}</processor> 
    </configuration> 
</executions> 

和:

<groupId>com.mysema.maven</groupId> 
<artifactId>maven-apt-plugin</artifactId> 
<version>1.0.4</version> 

我希望做的是这样的:

<configuration> 
    <packageName>com.my.package</packageName> 
    <sourceFolder>target/generated-sources</sourceFolder> 
    <targetFolder>target/generated-sources/querydsl</targetFolder> 
</configuration> 

...这将生成类:

  • com.my.package.QFoo.java
  • com.my.package.QBar.java

由于没有共同的JPA或JDO注释,并且我无法访问源文件,我无法使用任何com.mysema.query.apt.*Processor作为maven-apt-plugin的<processor>

编辑1:添加了完整的maven-apt-plugin配置。

编辑2: - 我能得到行家-的apt-插件通过maven的命令行零星工作,但不通过延长AbstractQuerydslProcessor寻找@XmlType -annotated类的Eclipse/STS。双代码生成当然不是一个理想的解决方案。

+0

你可以发布maven-apt-plugin的完整配置吗?也可以使用最新版本https://github.com/mysema/maven-apt-plugin/ –

+0

@TimoWestkämper - 根据编辑1更新。 –

+0

编辑3:也查看了[BeanAnnotationProcessor](http://search.maven.org /#artifactdetails%7Ccom.mysema.rdf%7Crdfbean-core%7C1.6.1%7Cjar)每个[示例](https://github.com/mysema/maven-apt-plugin),但遇到[问题] (https://github.com/mysema/maven-apt-plugin/issues/17)。 –

回答

5

答案是使用蒂莫概括这里的策略来生成Q-类:https://github.com/mysema/querydsl/issues/196

在我模块的package-info.java

@QueryEntities({ com.remote.module.Foo.class, 
    com.remote.module.Bar.class }) 
package com.my.local.module.querydsl; 

import com.mysema.query.annotations.QueryEntities; 

在Maven POM的插件运行:

<plugin> 
    <groupId>com.mysema.maven</groupId> 
    <artifactId>apt-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>apt-maven-plugin-remote-module-QuerydslAnnotationProcessor</id> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>target/generated-sources</outputDirectory> 
       <showWarnings>true</showWarnings> 
       <!-- genereate Q-classes specified in package-info.java --> 
       <processor>com.mysema.query.apt.QuerydslAnnotationProcessor</processor> 
      </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
     </dependency> 
    </dependencies> 
</plugin> 
+0

target/generated-sources不是目标目录的最佳选择,请考虑使用子目录。还修复插件的版本,以获得更多确定性结果。 –

+0

@Timo:插件版本由父POM的插件依赖项管理。好奇为什么目标/生成源不是最优的。 –

+0

应该使用target/generated-sources的子文件夹,使用此模式避免目标文件夹位于源文件夹内的情况 –