2012-12-18 96 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的子文件夾,使用此模式避免目標文件夾位於源文件夾內的情況 –