当前位置: 首页 > 知识库问答 >
问题:

如何在Gradle Build中为测试范围映射器接口生成Mapstruct映射器实现?

华懿轩
2023-03-14

我有一个简单的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
@Mapper
public interface SomeMapper {

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

    String fromLocalDate(LocalDate localDate);
}
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

共有1个答案

壤驷升
2023-03-14

您需要配置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"

}
 类似资料:
  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好

  • 使用@SpringBootTest,据我所知,Spring实际上是在启动应用程序,并且应该创建映射器类,所以我不明白,为什么映射器总是空?!当我删除@SpringBootTest中的DummyMapper.class时,会出现一个错误,上面写着“Failed to load application Context”。这向我表明,映射器是被识别的。 我觉得奇怪的另一件事是,我必须在映射器中使用“un

  • Hi这似乎适用于添加额外的方法,但不适用于在现有方法上添加新的注释。假设我们有以下课程:

  • 假设我需要将两个对象映射成一个或一个对象映射成一个(重载)。我可以通过以下映射来实现: 是否有一种方法可以更改第二个映射器“先做第一个映射器”,然后应用的附加映射?

  • 我想用Kotlin中的Mapstruct将实体映射到带有嵌套DTO的DTO。 在Java中,这是这样的:。 应该如何使用Kotlin实现它?

  • 嗨,到目前为止,我已经能够在简单的类之间进行映射了。现在我必须在接口之间进行映射。假设我有两个接口,其中许多类实现了这些接口。由于我没有了解如何做,我已经映射到特定类型的接口a。现在我需要做反向映射,其中属性可能在子类中,如何在这种情况下做反向映射。我尝试了@ inheritaninverseconfigurationin标签,但没有成功。< br >如果我能得到一些代码片段来理解,而不是阅读描述