2017-01-09 6 views
2

私はgradleビルドスクリプトを持っています。私はこのスクリプトでQueryDSLメタデータを生成したいと思う。これらのメタデータは、build/generated-sources/metamodelフォルダの下に生成されます。GradleはQuerydslメタデータを別々の注釈プロセッサで2回生成します

現時点で直面している問題は、メタモデルが1回だけ生成されるのではなく、2回生成されることです。目的のターゲットと共に、デフォルトのbuld/classes/...の "duplicate class"エラーが生成されます。

sourceSets { 
    generated.java.srcDirs=['build/generated-sources/metamodel'] 
    main { 
     java { srcDir 'src/main/java' } 
    } 
    test { 
     java { srcDir 'src/main/test' } 
    } 
} 

configurations { querydslapt } 

dependencies { 
    compile 'org.hibernate:hibernate-entitymanager:5.2.3.Final', 
      'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final-redhat-1', 
      'com.querydsl:querydsl-jpa:4.1.3', 
      // ... others, non-hibernate/querydsl ... 
    querydslapt 'com.querydsl:querydsl-apt:4.1.3' 
} 

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.querydsl.apt.hibernate.HibernateAnnotationProcessor'] 
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next() 
} 

compileJava { 
    dependsOn generateSources 
    source generateSources.destinationDir 
} 

Gradleのトレースによると、問題は、ミックスに2つのAnnotatioProcessorsがあることであるように思われます。まず、HibernateAnnotationProcessorです。次に、JPAAnnotationProcessorが作成され、最終的に複製クラスが生成されます。そして、私は理由を理解できません、ビルドスクリプトはok-ishに見えます。私は推測するかもしれませんが、私はどんな提案にも感謝しています。もしかしたら、私は自分のgradle-cacheも掃除しました。純粋なビルドスクリプト関連の問題ではないかもしれませんが、コンソールを介してスクリプトを実行してもその動作は維持されます。私にとって

Gist, basically exactly what I "should" need

(older) Post regarding this issue

答えて

0

This thread's solution作品、アイデアがjavacのに注釈プロセッサをフックすることで、HibernateAnnotationProcessorはおおよそのように、compilerArgsを経由して宣言することができます。

dependencies { 
    compile 'org.hibernate:hibernate-entitymanager:5.2.3.Final', 
      'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final-redhat-1',   
      'com.querydsl:querydsl-jpa:4.1.4', 
      'com.querydsl:querydsl-apt:4.1.4', 
      // other 
} 

ext { 
    generatedSourcesDir = file("build/generated-sources/metamodel") 
} 

sourceSets { 
    main { 
     java { 
      srcDir 'src/main/java' 
      srcDir generatedSourcesDir 
     } 
    } 
    test { 
     java { srcDir 'src/main/test' } 
    } 
} 

compileJava { 
    doFirst { 
     generatedSourcesDir.mkdirs() 
    } 
    options.compilerArgs += ['-s', generatedSourcesDir, 
          '-processor', 'com.querydsl.apt.hibernate.HibernateAnnotationProcessor'] 
} 

しかし、私はまだ最初のアプローチがうまくいかない(2つの注釈プロセッサを実行する)のは不思議です。だから、どんな考えもまだ高く評価されています。

関連する問題