Создание Q-классов QueryDsl из пакета

Как сгенерировать Q-классы QueryDsl, указав только имя пакета? Учитывая, что исходные классы находятся в моей папке target/generated-sources, поскольку они являются продуктом других плагинов сборки (WSDL, XSD и т. д.).

Я пробовал использовать следующие плагины, но не могу найти правильную конфигурацию:

<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.*Processors для <processor> maven-apt-plugin.

EDIT 1: добавлена ​​полная конфигурация maven-apt-plugin.

EDIT 2: - мне удалось заставить maven-apt-plugin время от времени работать через командную строку maven, но не Eclipse/STS, расширив AbstractQuerydslProcessor для поиска @XmlType -аннотированные классы. Двойная генерация кода, по общему признанию, не является идеальным решением.


person JJ Zabkar    schedule 18.12.2012    source источник
comment
Не могли бы вы опубликовать полную конфигурацию для maven-apt-plugin? Также используйте новейшую версию github.com/mysema/maven-apt-plugin.   -  person Timo Westkämper    schedule 19.12.2012
comment
@TimoWestkämper - обновлено в соответствии с Edit 1.   -  person JJ Zabkar    schedule 20.12.2012
comment
Редактировать 3: также изучил BeanAnnotationProcessor согласно примеру, но столкнулся с проблема.   -  person JJ Zabkar    schedule 20.12.2012


Ответы (1)


Ответ заключается в создании 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>
person JJ Zabkar    schedule 20.12.2012
comment
target/generated-sources не является оптимальным выбором для целевого каталога, рассмотрите возможность использования подкаталога. Также исправьте версию плагина, чтобы получить более детерминированные результаты. - person Timo Westkämper; 21.12.2012
comment
@Timo: версия плагина управляется зависимостями плагина родительского POM. Любопытно, почему target/generated-sources не оптимальны. - person JJ Zabkar; 26.12.2012
comment
Вместо этого следует использовать подпапки target/generated-sources, используя этот шаблон, вы избегаете ситуаций, когда ваша целевая папка находится внутри исходной папки. - person Timo Westkämper; 29.12.2012