3

Eclipse で QueryDSL を使用して Maven ベースの SpringRoo プロジェクトをセットアップしようとしていますが、Roo を有効にするとジェネレーターが機能しないようです。単純なプロジェクトを作成し、pom.xml に必要な querydsl プラグイン/依存関係を入力すると、メタモデル クラスが自動的に生成されます。

ただし、基本的な 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 を共有してもらえますか?

ありがとう、

エリック

4

3 に答える 3

2

com.mysema.query.apt.jpa.JPAAnnotationProcessorには、javax.persistence.Entityアノテーション付きのJavaファイルが必要です。他のアノテーションを使用するか、実行時にエンティティアノテーションを追加すると、クラスは生成されません。

APTの代替としてのクラスローダーベースのコード生成については、Querydslリファレンスドキュメントのこの章を参照してくださいhttp://www.querydsl.com/static/querydsl/2.8.2/reference/html/ch03s02.html

于 2012-11-17T12:51:39.730 に答える
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;
}
于 2012-11-21T16:05:11.780 に答える
0

このトピックに関する古い議論があり、Ken Rimple は次のように述べています。に追加します) QueryDSL がコードを生成しているとき、それらをエンティティとして認識しません。」

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

私には、これは、maven がプラグインを使用している順序 (ライフサイクル フェーズ) を変更することで微調整できるように思えます。

于 2013-01-24T11:22:45.830 に答える