从Gradle构建脚本生成JPA2元模型

| 我正在尝试为新项目设置Gradle构建脚本。该项目将使用JPA 2和Querydsl。 在Querydsl参考文档的下一页上,他们解释了如何为Maven和Ant设置其JPAAnnotationProcessor(apt)。 我想对Gradle进行同样的操作,但是我不知道该怎么做,而我心爱的朋友在这一方面并没有太大帮助。我需要找到一种方法来调用带有参数的Javac(最好没有任何其他依赖项),以便能够指定apt应该使用(?)的处理器。     
已邀请:
        我没有测试它,但这应该可以工作:
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)
            }
        }
    }
}
希望能帮助到你。     
        尽管我对使用Ant的gradle版本没有问题,但我同意原始海报,在这种情况下不希望这样做。我在这里找到了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的选择。     
        这个家伙的要旨为我工作: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\')
    }
}
    
        这是可以与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将完成其余的工作。     
        使用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。 要与groovy编译器一起使用,请将
compileJava
替换为
compileGroovy
。     
        要将JPA元模型生成器与Gradle结合使用,我已经在build.gradle中成功使用了以下内容,它的工作原理就像一个魅力:
buildscript {
    ext {}
    repositories { // maven central & plugins.gradle.org/m2 }
    dependencies {
        // other dependencies, e.g. Spring
        classpath(\'gradle.plugin.at.comm_unity.gradle.plugins:jpamodelgen-plugin:1.1.1\')
    }

    apply plugin: \'at.comm_unity.gradle.plugins.jpamodelgen\'

    dependencies {
        compile(\'org.hibernate:hibernate-jpamodelgen:5.1.0.Final\')
    }

    jpaModelgen {
        jpaModelgenSourcesDir = \"src/main/java\"
    }

    compileJava.options.compilerArgs += [\"-proc:none\"]
}
在构建任务中,将生成带有\'_ \'后缀的静态元模型类。之后,它们与我的@Entity模型位于同一目录中。     
        当您取出所有XML时,Querydsl Ant示例应该可以正常工作。因此,最终结果如下所示:
javac -sourcepath ${src} -cp ${cp} -proc:only -processor com.mysema.query.apt.jpa.JPAAnnotationProcessor -s ${generated}
src
cp
generated
您可能可以从Gradle中提取。     

要回复问题请先登录注册