我正试图让Mapstruct与gradle一起工作。当我在eclipse中从引导指示板运行服务时,这些实现生成并工作得很好,但是当使用gradlew bootrun运行时,它们不生成,并且找不到bean。下面是错误:
*************************** 应用程序无法启动
描述:
字段fooMapper在ServiceImpl需要一个类型为' fooMapper '的bean
注入点有如下注解:- @org.springframework.beans.factory.annotation.Autowired(要求= true)
行动:
考虑在你的配置中定义一个'FooMapper'类型的bean。
这是我的构建。gradle文件:
plugins {
id "org.springframework.boot"
id "groovy"
id "com.diffplug.eclipse.apt" version "3.31.0"
}
configurations {
// configuration to enable running bootRun locally
// with embedded h2 database
runlocal
}
ext {
mapstructVersion = "1.5.0.Beta1"
}
dependencies {
implementation "org.mapstruct:mapstruct:${mapstructVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
testImplementation "org.testng:testng:6.10", "org.easytesting:fest-assert:1.4"
implementation project(":common")
implementation "org.springframework.boot:spring-boot-starter-web:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-jdbc:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-validation:$springBootVersion"
implementation "org.codehaus.gpars:gpars:1.2.1"
developmentOnly "org.springframework.boot:spring-boot-devtools:$springBootVersion"
runlocal project(":test-db")
testImplementation project(":test-db")
}
sourceSets.main.groovy.srcDirs += ["build/generated/sources"]
bootRun {
classpath = sourceSets.main.runtimeClasspath + configurations.runlocal
}
tasks.withType(JavaCompile) {
options.compilerArgs = [
"-Amapstruct.suppressGeneratorTimestamp=true",
"-Amapstruct.defaultComponentModel=spring",
"-Amapstruct.verbose=true"
]
}
是因为我的代码是用groovy写的吗?但是为什么它会与eclipse中的引导仪表板一起工作呢?我正在使用@Mapper(componentModel = 'spring')
,但这并没有解决这个问题。使用1.4.2版本。FINAL也不行。任何帮助都将非常感激!
在eclipse中有同样的问题,解决了配置我的项目属性:
去:Java Compiler>注解处理
SetEnable Project specific settings真正的
去:Java Compiler>注释处理>工厂路径
添加外部jar:在这里找到您的mapstruct-processor-1.4.2-Final.jar的位置在gradle缓存目录中,我使用debian 11,我的路径是:
/.gradle/caches/modules-2/files-2.1/org.mapstruct/mapstruct-processor/1.4.2.Final/e55bd90d51cddd638c07d5bd89fc7535d4e3d069/mapstruct-processor-1.4.2.Final.jar
应用并关闭,gradle应该重新构建项目,生成两个新文件夹。Apt_generated和。Apt_generated_tests在包资源管理器上使用映射程序代码