21

新しいプロジェクト用にGradleビルドスクリプトを設定しようとしています。そのプロジェクトは、QuerydslとともにJPA2を使用します。

Querydslのリファレンスドキュメントの次のページでは、MavenとAnt用にJPAAnnotationProcessor(apt)を設定する方法を説明しています。

Gradleでも同じことをしたいのですが、どうすればいいのかわからず、愛する友人はこれについてあまり助けてくれませんでした。aptが使用するプロセッサを指定できるように、引数を使用して(できれば追加の依存関係なしで)Javacを呼び出す方法を見つける必要があります(?)

4

7 に答える 7

16

Ant の gradle make の使用に問題はありませんが、この場合は望ましくないという元のポスターに同意します。ここでTom Anderson による github プロジェクトを見つけました。これは、より良いアプローチであると私が信じていることを説明しています。ニーズに合わせて少し変更しました(src / main / generatedへの出力)。次のようになります。

sourceSets {
     generated
}

sourceSets.generated.java.srcDirs = ['src/main/generated']

configurations {
     querydslapt
}

dependencies {     
    compile 'mine go here'
    querydslapt 'com.mysema.querydsl:querydsl-apt:2.7.1'
}

task generateQueryDSL(type: Compile, group: 'build', description: 'Generates the QueryDSL query types') {
         source = sourceSets.main.java
         classpath = configurations.compile + configurations.querydslapt
         options.compilerArgs = [
                "-proc:only",
                "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor"
         ]
         destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}
compileJava.dependsOn generateQueryDSL

このアプローチは、他のアプローチよりも私にとってはるかに理にかなっています。もしあなたにとってもそうであれば、querydsl 生成のための別のオプションがあります。

于 2012-08-23T18:03:10.750 に答える
12

私はそれをテストしませんでしたが、これはうまくいくはずです:

repositories {
    mavenCentral()
}
apply plugin: 'java'
dependencies {
   compile(group: 'com.mysema.querydsl', name: 'querydsl-apt', version: '1.8.4')
   compile(group: 'com.mysema.querydsl', name: 'querydsl-jpa', version: '1.8.4')
   compile(group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.6.1')
}

compileJava {
    doFirst {
        Map otherArgs = [
            includeAntRuntime: false,
            destdir: destinationDir,
            classpath: configurations.compile.asPath,
            sourcepath: '',
            target: targetCompatibility,
            source: sourceCompatibility
        ]
        options.compilerArgs = [
            '-processor', 'com.mysema.query.apt.jpa.JPAAnnotationProcessor',
            '-s', "${destinationDir.absolutePath}".toString()
        ]
        Map antOptions = otherArgs + options.optionMap()
        ant.javac(antOptions) {
            source.addToAntBuilder(ant, 'src', FileCollection.AntType.MatchingTask)
            options.compilerArgs.each {value ->
                compilerarg(value: value)
            }
        }
    }
}

それが役に立てば幸い。

于 2011-06-22T22:49:37.213 に答える
9

この男の要点は私のために働いた: https://gist.github.com/EdwardBeckett/5377401

sourceSets {
    generated {
        java {
            srcDirs = ['src/main/generated']
        }
    }
}

configurations {
    querydslapt
}

dependencies {
    compile 'org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final'
    compile "com.mysema.querydsl:querydsl-jpa:$querydslVersion"
    querydslapt "com.mysema.querydsl:querydsl-apt:$querydslVersion"
}

task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {
    source = sourceSets.main.java
    classpath = configurations.compile + configurations.querydslapt
    options.compilerArgs = [
            "-proc:only",
            "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor"
    ]
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}

compileJava {
    dependsOn generateQueryDSL
    source generateQueryDSL.destinationDir
}

compileGeneratedJava {
    dependsOn generateQueryDSL
    options.warnings = false
    classpath += sourceSets.main.runtimeClasspath
}

clean {
    delete sourceSets.generated.java.srcDirs
}

idea {
    module {
        sourceDirs += file('src/main/generated')
    }
}
于 2013-08-23T22:49:52.803 に答える
4

これは、netbeans とシームレスに連携して統合する簡単なセットアップです。Javac は基本的に、多くの介入なしに必要なすべてのジョブを実行します。残りは、Netbeans などの IDE で動作するようにするための小さな作業です。

apply plugin:'java'

dependencies {
    // Compile-time dependencies should contain annotation processors
    compile(group: 'com.mysema.querydsl', name: 'querydsl-apt', version: '1.8.4')
    compile(group: 'com.mysema.querydsl', name: 'querydsl-jpa', version: '1.8.4')
    compile(group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.6.1')
}

ext {
    generatedSourcesDir = file("${buildDir}/generated-sources/javac/main/java")
}

// This section is the key to IDE integration.
// IDE will look for source files in both in both
//
//  * src/main/java
//  * build/generated-sources/javac/main/java
//
sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            srcDir generatedSourcesDir
        }
    }
}

// These are the only modifications to build process that are required.
compileJava {
    doFirst {
        // Directory should exists before compilation started.
        generatedSourcesDir.mkdirs()
    }
    options.compilerArgs += ['-s', generatedSourcesDir]
}

以上です。Javac が残りの作業を行います。

于 2014-04-22T10:54:23.643 に答える
4

Gradle 1.3 以降 (古いものはテストされていません) では、次のように Querydsl APT を使用できます。

configurations {
  javacApt
}
dependencies {
  javacApt 'com.mysema.querydsl:querydsl-apt:3.3.0'
}
compileJava {
  options.compilerArgs <<
    '-processorpath' << (configurations.compile + configurations.javacApt).asPath <<
    '-processor' << 'com.mysema.query.apt.jpa.JPAAnnotationProcessor'
}

これらのコンパイラ引数は、javac に直接渡されます。

compileJavagroovy コンパイラで使用するには、に置き換えcompileGroovyます。

于 2013-01-15T12:31:14.233 に答える
1

Querydsl Ant の例は、すべての XML を削除した場合とほとんど同じように機能するはずです。したがって、最終的には次のようになります。

javac -sourcepath ${src} -cp ${cp} -proc:only -processor com.mysema.query.apt.jpa.JPAAnnotationProcessor -s ${generated}

srccpそしてgeneratedおそらくGradleから抽出できるでしょう。

于 2011-06-21T21:07:56.040 に答える