1

新しいスプリング ブート プロジェクト (個人用) で mapstruct によって生成されたクラスを使用しようとしていますが、ビルド スクリプトには別のものが必要なようです。

クラスが正しく生成されているため、それら(ビルドフォルダー内のJavaおよびクラスファイル)が表示され、アプリケーションがjarファイルから実行されると、実際に機能します。

問題は、Eclipse STS から実行すると、Spring が生成されたクラスを見つけることができないと表示され、@Component を使用して作成され、ComponentScanPath にあることを確認しました。

build.gradle

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

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot' 

ext {
    javaLanguageLevel = '1.8'
    generatedMapperSourcesDir = "${buildDir}/generated-src/mapstruct/main"
}
configurations {
    mapstruct
}
sourceSets.main {
    ext.originalJavaSrcDirs = java.srcDirs
    java.srcDir "${generatedMapperSourcesDir}"
}
jar {
    baseName = 'MtgGrimoire'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-aop")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-websocket")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-ws")
    compile('org.postgresql:postgresql:9.3-1102-jdbc41')
    compile( 'org.mapstruct:mapstruct:1.0.0.Beta1' )
    compile fileTree(dir: 'libs', include: ['*.jar'])
    mapstruct( 'org.mapstruct:mapstruct-processor:1.0.0.Beta1' )
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

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

task generateMainMapperClasses(type: JavaCompile) {
    ext.aptDumpDir = file( "${buildDir}/tmp/apt/mapstruct" )
    destinationDir = aptDumpDir

    classpath = compileJava.classpath + configurations.mapstruct
    source = sourceSets.main.originalJavaSrcDirs
    ext.sourceDestDir = file ( "$generatedMapperSourcesDir" )

    options.define(
        compilerArgs: [
            "-nowarn",
            "-proc:only",
            "-encoding", "UTF-8",
            "-processor", "org.mapstruct.ap.MappingProcessor",
            "-s", sourceDestDir.absolutePath,
            "-source", rootProject.javaLanguageLevel,
            "-target", rootProject.javaLanguageLevel,
        ]
    );

    inputs.dir source
    outputs.dir generatedMapperSourcesDir;
    doFirst {
         sourceDestDir.mkdirs()
    }
    doLast {
        aptDumpDir.delete()
    }
}

compileJava.dependsOn generateMainMapperClasses

また、プロジェクトのbinフォルダー内に生成されていないようです

4

0 に答える 0