gpt4 book ai didi

java - 如何在 Gradle 构建中为测试范围映射器接口(interface)生成 Mapstruct 映射器实现?

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:12 26 4
gpt4 key购买 nike

我有一个简单的 Java 单模块 Gradle 项目,我在其中使用 Mapstruct 进行 Java 映射。我的 build.gradle 看起来像这样:

plugins {
id 'java-library'
id 'groovy'
id 'net.ltgt.apt' version '0.20'
}

repositories {
jcenter()
}

dependencies {
implementation 'org.mapstruct:mapstruct-jdk8:1.2.0.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.2.0.Final'

testImplementation 'org.codehaus.groovy:groovy-all:2.5.5'

// Use the awesome Spock testing and specification framework even with Java
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
testImplementation 'junit:junit:4.12'
}

sourceSets {
main {
java {
srcDirs "${project.buildDir}/generated/sources/annotationProcessor/java/main"
}
}
test {
java {
srcDirs "${project.buildDir}/generated/sources/annotationProcessor/java/test"
}
}
}

我的源文件夹包含以下 Java 源代码:

src
├── main
│   ├── java
│   │   └── ch
│   │   └── silviowangler
│   │   ├── Person.java
│   │   ├── SomeMapper.java
│   │   └── User.java
│   └── resources
└── test
├── groovy
│   └── ch
│   └── silviowangler
├── java
│   └── ch
│   └── silviowangler
│   └── YoloMapper.java
└── resources

SomeMapper 是一个简单的映射器接口(interface),看起来像这样

@Mapper
public interface SomeMapper {

@Mappings({
@Mapping(target = "firstName", source = "nickname"),
@Mapping(target = "surname", ignore = true),
@Mapping(target = "dateOfBirth", ignore = true)
})
Person fromString(User user);
}

驻留在测试范围内的 YoloMapper 看起来像这样

@Mapper
public interface YoloMapper {

String fromLocalDate(LocalDate localDate);
}

当我运行 ./gradlew clean cTJ 时,构建成功完成,注释处理器为 SimpleMapper 生成映射器实现,但它不会为 生成任何内容YoloMapper。构建后的build文件夹如下所示

build
├── classes
│   └── java
│   ├── main
│   │   └── ch
│   │   └── silviowangler
│   │   ├── Person.class
│   │   ├── SomeMapper.class
│   │   ├── SomeMapperImpl.class
│   │   └── User.class
│   └── test
│   └── ch
│   └── silviowangler
│   └── YoloMapper.class
├── generated
│   └── sources
│   └── annotationProcessor
│   └── java
│   ├── main
│   │   └── ch
│   │   └── silviowangler
│   │   └── SomeMapperImpl.java
│   └── test
└── tmp
├── compileJava
└── compileTestJava

如何让 Gradle 告诉注释处理器在测试范围内生成 Mapstruct 映射器实现?

最佳答案

需要配置testAnnocationProcess配置,如下:

dependencies{

// for Main sources set
implementation 'org.mapstruct:mapstruct-jdk8:1.2.0.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.2.0.Final'

// for Test sources set
testAnnotationProcessor "org.mapstruct:mapstruct-processor:1.2.0.Final"

}

关于java - 如何在 Gradle 构建中为测试范围映射器接口(interface)生成 Mapstruct 映射器实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54400637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com