2017-02-02 17 views
0

私は、Spring Data JPAとHibernate(私が間違っていない場合は、最終的には、最終的なもの)を持つSpring Boot(v1.4.2)アプリケーションを持っています。 jpadmodelgen-pluginを追加して、私のためにメタモデルクラスを生成しました。なぜなら、私は怠け者だからです。残念ながら、gradle buildを実行すると、いくつかの厄介なエラーが発生します。これについての興味深いことは、gradle test(完全なアプリケーションの実際のユニットテストと統合テストを実行する)がエラーなしで実行されることです。私はIntelliJでアプリを実行することも、人生の偉大さです。私の執事Jenkinsはそれを構築できません。Gradle compileJpaModelgenJava FAILED

> gradle build 
:initJpaModelgenSourcesDir 
:compileJpaModelgen UP-TO-DATE 
:compileJava UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:findMainClass 
:jar 
:bootRepackage 
:assemble 
:compileJpaModelgenJava 

Mapping_.java:3: error: cannot find symbol 
import com.<snip>.model.domain.auth.Member; 
           ^
    symbol: class Member 
    location: package com.<snip>.model.domain.auth 
Mapping_.java:7: error: package javax.persistence.metamodel does not exist 
import javax.persistence.metamodel.SingularAttribute; 
           ^
Mapping_.java:8: error: package javax.persistence.metamodel does not exist 
import javax.persistence.metamodel.StaticMetamodel; 
           ^

100 errors 
:compileJpaModelgenJava FAILED 

FAILURE: Build failed with an exception. 

このエラーは、自分のクラスが見つからないだけでなく、javax.persistenceも示しています。ファイルはbuild.gradleです。

buildscript { 
    ext { 
     springBootVersion = '1.4.2.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath('gradle.plugin.at.comm_unity.gradle.plugins:jpamodelgen-plugin:1.1.2') 
    } 
} 

plugins { 
    id "at.comm_unity.gradle.plugins.jpamodelgen" version "1.1.2" 
} 

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'findbugs' 
apply plugin: 'jacoco' 

jar { 
    baseName = 'services' 
    version = '1.0.0' 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

jpaModelgen { 
    library = "org.hibernate:hibernate-jpamodelgen:5.0.11.Final" 
    jpaModelgenSourcesDir = "src/generated/java" 
} 

findbugs { 
    ignoreFailures = true 
    reportLevel = 'low' 
} 

javadoc { 
    failOnError = false 
} 

dependencies { 
    // Spring Boot, some Apache Commons libs and JDBC Drivers. 
} 

sourceSets { 
    unitTest { 
     resources { 
      srcDir "resources" 
     } 
    } 
    /*generated { 
     java.srcDir "${buildDir}/src/generated/java" 
    }*/ 
} 

compileJava.options.compilerArgs += ["-proc:none"] 

アベンジャーズ組み立て!私は助けが必要です。

答えて

3

プラグインを保持するこの問題の解決策を知っている誰かがいることを期待していましたが、明らかにそうではありません。私は、プラグインに頼らず、もう少し自分で作業することで、違う方法を見つけました。

私の解決方法はthis answerに基づいています。

  • プラグインを削除しました。
  • Hibernateのjpamodelgenへの依存関係をコンパイルします。
  • 変数を定義しましたgeneratedSourcesDir ...
  • ...これはメインのJavaソースセットに追加されました。
  • カスタム削除タスクremoveGeneratedMetamodelが必要です。それ以外の場合は、奇妙なコンパイルエラーlike this oneが発生します。
  • メタモデルを生成するいくつかのオプションをcompileJavaに追加しました。
  • removeGeneratedMetamodelcompileJavaおよびcleanタスクに依存関係が追加されました。

ここにbuild.gradleがあります。

buildscript { 
    ext { 
     springBootVersion = '1.4.2.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'findbugs' 
apply plugin: 'jacoco' 

jar { 
    baseName = 'services' 
    version = '1.0.0' 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

findbugs { 
    ignoreFailures = true 
    reportLevel = 'low' 
} 

javadoc { 
    failOnError = false 
} 

dependencies { 
    // Spring Boot, some Apache Commons libs and JDBC Drivers. 

    compile group: 'org.hibernate', name: 'hibernate-jpamodelgen', version: '5.0.11.Final' 
} 

ext { 
    generatedSourcesDir = file("src/main/java/generated") 
} 

sourceSets { 
    unitTest { 
     resources { 
      srcDir "resources" 
     } 
    } 
    main { 
     java { 
      srcDir 'src/main/java' 
      srcDir generatedSourcesDir 
     } 
    } 
} 

task removeGeneratedMetamodel(type: Delete) { 
    generatedSourcesDir.deleteDir() 
} 

compileJava { 
    doFirst { 
     generatedSourcesDir.mkdirs() 
    } 
    dependsOn(removeGeneratedMetamodel) 
    options.compilerArgs += ['-s', generatedSourcesDir] 
} 

clean.dependsOn(removeGeneratedMetamodel) 
0

私は同じエラーがありました。

私は

compile group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' 

依存関係を追加し、それが問題を解決しました。 この解決策が見つかりましたhere

関連する問題