AnnotationProcessor и зависимости - PullRequest
0 голосов
/ 26 мая 2018

Я использую gradle / querydsl и JPA 2.1.

Я хотел бы сгенерировать метаданные querydsl, используя APT (QEntities).

Для этого я использую gradle-apt-plugin и gradle 4.7

В моем проекте я настроил опцию compileJava, используя:

compileJava { options.annotationProcessorGeneratedSourcesDirectory = file("$projectDir/src/generated2/java") }

В своих зависимостях я добавил

compile 'org.springframework.boot:spring-boot-starter-data-jpa'" annotationProcessor "com.querydsl:querydsl-apt:$querydslVersion:jpa"

Средство запуска пружин добавляет org.hibernate.javax.persistence: hibernate-jpa-2.1-api: 1.0.0. Окончательный jar, содержащий класс javax.persistence.Entity, в compileClasspath.

При запуске задачи compileJava я получил ошибку: caused by: java.lang.NoClassDefFoundError: javax/persistence/Entity at com.querydsl.apt.jpa.JPAAnnotationProcessor.createConfiguration(JPAAnnotationProcessor.java:37)

Не понимаю, почему процессор аннотаций не может загрузить этот класс.

1 Ответ

0 голосов
/ 12 октября 2018

В случае, если кто-то еще ищет.Это мое полное решение (на основе вашего ответа).Важными частями являются плагины net.ltgt.apt* для активации генерации кода также в eclipse и три последние зависимости querydsl.

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


plugins { // activates the automatic code generation
    id 'net.ltgt.apt' version '0.18'
    id 'net.ltgt.apt-eclipse' version '0.18' 
}


apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'

group = 'com.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    providedRuntime
}


dependencies {
    runtimeOnly             'com.h2database:h2'
    implementation          'org.springframework.boot:spring-boot-starter-actuator'
    implementation          'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation          'org.springframework.boot:spring-boot-starter-web'
    providedRuntime         'org.springframework.boot:spring-boot-starter-tomcat'


    testImplementation      'org.springframework.boot:spring-boot-starter-test'
    testImplementation      'org.springframework.boot:spring-boot-starter-webflux'

    // querydsl
    annotationProcessor     'com.querydsl:querydsl-apt:4.1.3:jpa'
    annotationProcessor     'org.springframework.boot:spring-boot-starter-data-jpa' // needed because the query dsl annotation processor doesn't recognize javax.persistence.Entity
    compile                 'com.querydsl:querydsl-jpa:4.1.3'
}
...