sourceSets { generated { java { srcDirs = ['src/main/generated'] } } }
task generateQueryDSL(type: JavaCompile, group: 'build') { source = sourceSets.main.java classpath = configurations.compile 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 }
이 두 task를 통해서, 기존의 compileJava의 경우 반드시 generateQueryDSL task를 실행 후, 동작하게 되고 source는 generateQueryDSL.destinationDir을 참고해서 compile을 행하게 됩니다. 또한 compileGeneratedJava task 역시 generateQueryDSL task를 실행하고, compile 된 객체들을 같이 이용해서 jar를 만들어주는 cycle을 통하게 됩니다.
clean { delete sourceSets.generated.java.srcDirs }
다음은 build.gradle 파일의 전체입니다. 참고해보시길 바랍니다.
sourceSets { generated { java { srcDirs = ['src/main/generated'] } } } dependencies { def querydslVersion = '3.2.4' def slf4jVersion = "1.7.2" def queryDSL = '3.2.4' compile project(':common') compile group: 'mysql', name: 'mysql-connector-java', version:'5.1.22' compile group: 'com.jolbox', name: 'bonecp', version:'0.7.1.RELEASE' compile group: 'com.google.guava', name: 'guava', version:'14.0' compile group: 'org.springframework', name: 'spring-core', version:'3.2.3.RELEASE' compile group: 'org.springframework', name: 'spring-orm', version:'3.2.3.RELEASE' compile group: 'org.springframework', name: 'spring-tx', version:'3.2.3.RELEASE' compile group: 'org.springframework', name: 'spring-context', version:'3.2.3.RELEASE' compile group: 'org.springframework', name: 'spring-context-support', version:'3.2.3.RELEASE' compile group: 'org.hibernate', name: 'hibernate-core', version:'4.1.10.Final' compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.0-api', version:'1.0.1. Final' compile group: 'org.hibernate', name: 'hibernate-entitymanager', version:'4.1.10.Final' compile group: 'org.hibernate', name: 'hibernate-validator', version:'4.3.1.Final' compile group: 'org.springframework.data', name: 'spring-data-jpa', version:'1.4.2.RELEASE' compile group: 'com.mysema.querydsl', name: 'querydsl-core', version:"$queryDSL" compile group: 'com.mysema.querydsl', name: 'querydsl-jpa', version:"$queryDSL" compile group: 'com.mysema.querydsl', name: 'querydsl-sql', version:"$queryDSL" compile "com.mysema.querydsl:querydsl-apt:$queryDSL" provided 'org.projectlombok:lombok:0.12.0' compile "org.slf4j:jcl-over-slf4j:$slf4jVersion" compile "org.slf4j:jul-to-slf4j:$slf4jVersion" provided "com.mysema.querydsl:querydsl-apt:$querydslVersion" provided 'org.projectlombok:lombok:0.12.0' } task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') { source = sourceSets.main.java classpath = configurations.compile + configurations.provided 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') } }
gradle build를 실행하면 이제 Q class들이 모두 compile 되고, jar 안에도 역시 Q class들이 모두 위치한 것을 알 수 있습니다.