【发布时间】:2019-02-22 20:26:43
【问题描述】:
使用 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) 的线程“main”java.lang.ExceptionInInitializerError 中的异常原因: java.lang.RuntimeException:java.lang.ClassNotFoundException:不能 在以下位置找到 org.mapstruct.example.SourceTargetMapper 的实现 org.mapstruct.factory.Mappers.getMapper(Mappers.java:68) 在 org.mapstruct.example.SourceTargetMapper.(SourceTargetMapper.java:29) ... 1 更多原因:java.lang.ClassNotFoundException:找不到 org.mapstruct.example.SourceTargetMapper 的实现在 org.mapstruct.factory.Mappers.getMapper(Mappers.java:85) 在 org.mapstruct.factory.Mappers.getMapper(Mappers.java:65)
如果我从 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() }
但仍然无法正常工作。请检查缺少的内容。
【问题讨论】:
-
我在构建文件中看不到任何 spring-boot 依赖项。你能告诉你如何构建和运行应用程序吗?你也可以发布你的主要课程吗?
-
an
interface可能无法保留实例;与abstract class相对。 -
这是怎么解决的?
标签: java eclipse spring-boot gradle mapstruct