문서의 이전 판입니다!
Hibernate MetamodelGen을 이용하여 JPA2 MetaModel을 생성하는 예를 보여준다. 실제로는 compile 태스크에 들어가는게 좋으나, 현재 지원을 안 해서, 독릭적으로 JavaCompile 태스크를 만들고, 거기서 Annotation Processor만 호출하도록 변경한 것이다.
-proc:only
옵션 때문에 실제 컴파일을 하지 않는다.cannot find symbol
에러가 발생할 수 있는데, 이는 이 둘을 서로 따로 생성했을 때 발생하는 현상이다. 이 둘을 함께 지정해서 APT 를 수행해야 에러가 나지 않는다."-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor,org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor"
http://alvinalexander.com/java/jwarehouse/hibernate/build.gradle.shtml 에 있는 것을 옮겼다.
ext.jpaMetamodelGeneratedDir = "$buildDir/생성된 메타 모델 클래스를 저장할 디렉토리" configurations { jpaMetamodelGen { extendsFrom compile } } dependencies { jpaMetamodelGen "org.hibernate:hibernate-jpamodelgen:1.2.0.Final" } sourceSets { main { java { srcDir jpaMetamodelGeneratedDir } } } task generateJpaMetamodel(type: JavaCompile) { def targetDir = file(jpaMetamodelGeneratedDir) def compiledDestinationDir = "${buildDir}/tmp/apt-jpa" doFirst { // 항상 대상 디렉토리를 먼저 비우고 시작해야 한다. delete(targetDir) targetDir.mkdirs() } doLast { delete(compiledDestinationDir) // UP-TO-DATE 방지 } // -proc:only 는 Annotation Processor로 소스 생성만 한다 컴파일은 하지 않음 // -s 경로 는 생성된 소스가 들어갈 디렉토리를 뜻한다. classpath = configurations.jpaMetamodelGen source = sourceSets.main.java destinationDir = file(compiledDestinationDir) options.define( compilerArgs: [ "-nowarn", "-proc:only", "-encoding", "UTF-8", "-s", targetDir.absolutePath, "-processor", "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor" // 이 줄은 안해도 된다. 안하면 모든 어노테이션 프로세서 실행 ] ) } // 필요하면 compileJava가 generateJpaMetamodel 에 의존하도록 변경한다.