从Gradle将选项传递给JPAAnnotationProcessor

时间:2014-09-18 17:16:15

标签: jpa gradle querydsl

我有一个Gradle任务,它使用Querydsl JPAAnnotationProcessor从注释生成JPA查询类型源文件。我使用的Gradle任务非常类似于joeG在帖子Generating JPA2 Metamodel from a Gradle build script中的响应中的任务。

我能够生成源文件,但我想排除某个包中的某些文件。 Querydsl文档列出了querydsl.excludedPackages选项。如何将此选项传递给Gradle中的JPAAnnotationProcessor?

在Maven中我可以使用apt-maven-plugin并在配置中传递类似:

<options>
<querydsl.excludedPackages>com.thomsonreuters.domainmodel.eventhistory</querydsl.excludedPackages>
</options>

但我无法弄清楚如何使用Gradle来做到这一点。

3 个答案:

答案 0 :(得分:3)

我通过查看com.mysema.maven:apt-maven-plugin的源代码来找出答案,看看它是如何传递额外选项的。

它接受选项结构中的值,将字母A添加到键的开头,并以key = value的形式传递它们。因此,对于关键的querydsl.excludedPackages,我需要在options.compilerArgs列表中添加类似“-Aquerydsl.excludedPackages = com.package.to.ignore”的内容。

一旦我这样做,我就可以忽略我不想处理的包。

答案 1 :(得分:3)

使用最新的gradle会更容易

compileJava {
  options.compilerArgs += [
    '-Aquerydsl.excludedPackages=com.thomsonreuters.domainmodel.eventhistory'
  ]
}

dependencies {
  ...
  compile "com.mysema.querydsl:querydsl-jpa:3.6.3"
  compileOnly "com.mysema.querydsl:querydsl-apt:3.6.3:jpa"
}

答案 2 :(得分:2)

我目前使用此build.gradle脚本生成QueryDSL类型:

project("my-project") {

   sourceSets {
       generated {
           java {
               srcDir 'src/main/generated'
           }
       }
   }

   configurations {
      querydslapt
   }

   dependencies {      
      // your dependencies
      querydslapt  "com.mysema.querydsl:querydsl-apt:3.4.0"
   }

   task generateSources(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', 
                               '-Aquerydsl.excludedPackages=com.thomsonreuters.domainmodel.eventhistory']
       options.warnings = false
       destinationDir = file('src/main/generated')
       outputs.dir destinationDir
   }

   compileJava.source generateSources.outputs.files

   clean {
       delete sourceSets.generated.java.srcDirs
   }

}