簡體   English   中英

帶有Gradle和Eclipse的MapStruct無法正常工作

[英]MapStruct with Gradle and eclipse is not working

使用SpringBoot和MapStruct創建了gradle應用程序。

Build.gradle文件具有以下條目。

dependencies {
    compile "org.mapstruct:mapstruct-jdk8:${mapstructVersion}"
    testCompile 'org.testng:testng:6.10', 'org.easytesting:fest-assert:1.4'
    compile "org.mapstruct:mapstruct-processor:${mapstructVersion}"
}

plugins {
    id 'java'
    id 'net.ltgt.apt-eclipse' version '0.18'
}

映射器類

@Mapper(componentModel="spring")
public interface SourceTargetMapper {

    SourceTargetMapper INSTANCE = Mappers.getMapper(SourceTargetMapper.class);

    @Mapping(source = "qax", target = "baz")
    @Mapping(source = "baz", target = "qax")
    Target sourceToTarget(Source source);

    @InheritInverseConfiguration
    Source targetToSource(Target target);
}

Impl文件是在build文件夾下創建的,但是在運行代碼時出現錯誤:

線程“主”中的異常org.mapstruct.example.app.main(app.java:7)處的java.lang.ExceptionInInitializerError原因:java.lang.RuntimeException:java.lang.ClassNotFoundException:找不到org.mapstruct的實現org.mapstruct.factory.Mappers.getMapper(Mappers.java:68)處org.mapstruct.example.SourceTargetMapper。(SourceTargetMapper.java:29)處的.example.SourceTargetMapper ...另外1個原因:java.lang.ClassNotFoundException :在org.mapstruct.factory.Mappers.getMapper(Mappers.java:65)的org.mapstruct.factory.Mappers.getMapper(Mappers.java:85)處找不到org.mapstruct.example.SourceTargetMapper的實現

如果我從Build文件夾bin文件夾中移動Impl文件,則可以正常工作。 這意味着MapStruct在build文件夾下創建實現文件,並嘗試從bin文件夾訪問它。

如何將生成文件的位置更改為bin文件夾?

使用帶有M2e插件的Maven項目可以正常工作,但不能使用gradle。

建議更改后的Build.gradle文件。

    plugins {
    id 'java'
    id 'net.ltgt.apt-eclipse' version '0.18'
}

repositories {
    mavenCentral()
    mavenLocal()
}

task wrapper(type: Wrapper) { gradleVersion = '3.4' }

ext {
    mapstructVersion = "1.2.0.Final"
    javaLanguageLevel = '1.8'
    generatedMapperSourcesDir = "${buildDir}/generated-src/mapstruct/main"
}

sourceCompatibility = rootProject.javaLanguageLevel

sourceSets.main {
    ext.originalJavaSrcDirs = java.srcDirs
    java.srcDir "${generatedMapperSourcesDir}"
}

dependencies {
    compile "org.mapstruct:mapstruct-jdk8:${mapstructVersion}"
    testCompile 'org.testng:testng:6.10', 'org.easytesting:fest-assert:1.4'
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
}

tasks.withType(JavaCompile) {
    options.compilerArgs = ['-Amapstruct.suppressGeneratorTimestamp=true']
}

測試{useTestNG()}

但仍然無法正常工作。 請檢查缺少的內容。

看起來生成的源沒有自動包含在應用程序的類路徑中。

試一下github的示例,效果很好。

使用與您的應用程序示例相同的gradle配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM