从Gradle构建脚本生成JPA2 Metamodel

dSe*_*ien 20 apt gradle querydsl

我正在尝试为新项目设置Gradle构建脚本.该项目将使用JPA 2和Querydsl.

Querydsl参考文档的下一页中,他们解释了如何为Maven和Ant设置JPAAnnotationProcessor(apt).

我想和Gradle做同样的事情,但我不知道我的心爱的朋友怎么也没有帮我这个.我需要找到一种方法来调用Javac(最好没有任何额外的依赖关系)和参数,以便能够指定apt应该使用的处理器(?)

Joe*_*oeG 15

虽然我对使用Gradle使用Ant没有任何问题,但我同意原始的海报,在这种情况下它是不受欢迎的.我在这里找到了汤姆安德森的一个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
Run Code Online (Sandbox Code Playgroud)

这种方法对我来说比其他方法更有意义,如果对你也有,那么你有另一种选择来进行查询生成.

  • 谢谢你!这为 m 完成了工作,但我必须将 _type:Compile_ 替换为 _type:JavaCompile_ (2认同)

Fre*_*mon 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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Rya*_*lls 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')
    }
}
Run Code Online (Sandbox Code Playgroud)