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

具有时髦类的地图结构

韩征
2023-03-14

我想用gradle在groovy类上使用Mapstruct映射器。build.gradle中的配置看起来像一个Java项目。

dependencies {
    ...
    compile 'org.mapstruct:mapstruct:1.4.2.Final'

    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
    testAnnotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' // if you are using mapstruct in test code
}

问题是没有生成映射器的实现类。我还尝试为groovy编译任务应用不同的选项,但它不起作用。

compileGroovy {
    options.annotationProcessorPath = configurations.annotationProcessor
    // if you need to configure mapstruct component model
    options.compilerArgs << "-Amapstruct.defaultComponentModel=default"
    options.setAnnotationProcessorGeneratedSourcesDirectory( file("$projectDir/src/main/generated/groovy"))
}

有人知道Mapstruct是否可以与groovy类一起工作,以及我必须如何配置它吗?

共有1个答案

谭刚毅
2023-03-14

所以你可以使用这个版本:

plugins {
    id 'groovy'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.mapstruct:mapstruct:1.4.2.Final'
    implementation 'org.codehaus.groovy:groovy-all:3.0.9'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
}

compileGroovy.groovyOptions.javaAnnotationProcessing = true

有了这个汽车(与他们的示例略有不同)

import groovy.transform.Immutable

@Immutable
class Car {
    String make;
    int numberOfSeats;
    CarType type;
}

还有这个CarDto(同样,略有修改)

import groovy.transform.ToString

@ToString
class CarDto {

    String make;
    int seatCount;
    String type;
}

然后,您需要在车载地图中进行的唯一更改是忽略 Groovy 添加到对象的 metaClass 属性:

import org.mapstruct.Mapper
import org.mapstruct.Mapping
import org.mapstruct.factory.Mappers

@Mapper
interface CarMapper {
    CarMapper INSTANCE = Mappers.getMapper(CarMapper)

    @Mapping(source = "numberOfSeats", target = "seatCount")
    @Mapping(target = "metaClass", ignore = true)
    CarDto carToCarDto(Car car)
}

然后你可以这样做:

class Main {

    static main(args) {
        Car car = new Car("Morris", 5, CarType.SEDAN);

        CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);

        println carDto
    }
}

它打印出:

main.CarDto(Morris, 5, SEDAN)
 类似资料:
  • 我有以下Java问题 我有以下通用类,它们可能被描绘为: 其中

  • 问题内容: 有时,我只想为条目列表执行一个函数-例如: 有时我需要这些东西来进行模块初始化,所以我不想在全局名称空间中占用x之类的空间。一种解决方案是将map与lambda一起使用: 但这当然会创建一个不错的列表[None,None,…],所以我的问题是,是否存在没有返回列表的类似函数-因为我只是不需要它。 (当然,我也可以使用_x,因此不会留下可见的轮廓线-但地图解决方案看起来很整洁…) 问题答

  • 这是我的新pom,简化了,我创建了新项目,并添加了最小值以能够运行spock http://maven.apache.org/maven-v4_0_0.xsd" 但我仍然无法运行测试,现在我得到了 信息:Groovyc:编译模型测试时:java。lang.NoClassDefFoundError:org需要org/codehaus/groovy/ast/MethodCallTransformati

  • 问题内容: 我想要一张包含重复键的地图。 我知道有很多地图实现(Eclipse向我展示了大约50个),所以我敢肯定一定有一个允许这样做的地图实现。我知道编写自己的地图很容易做到这一点,但是我宁愿使用一些现有的解决方案。 也许在Commons Collections或Google Collections中? 问题答案: 你正在搜索多图,而commons-collection和Guava确实都有几种实

  • 问题内容: 你是否知道在给定超时后会自动清除条目的Java Map或类似标准数据存储?这意味着老化,旧的过期条目会自动“老化”。 最好在可通过Maven访问的开源库中? 我知道自己实现该功能的方法,并且过去已经做过几次,所以我并不是在这方面寻求建议,而是寻求指向一个好的参考实现的指针。 像WeakHashMap这样的基于WeakReference的解决方案不是一个选择,因为我的密钥很可能是非int

  • 我正在用-库在中创建一个随机图。 这将创建以下情节: 如你所见,它创建了两个不同的图——即使给定相同的节点和边。我如何让R图显示相同的图,这样我就可以在顺序相同的情况下突出显示一些边/节点。 目标是创建一个随机网络,在一定程度上,两个节点通过一条边连接(上面的例子是,对于节点)。然后,每次我绘制该图时,都会将节点绘制在同一点上(即使节点大小不同)。 我如何做到这一点?请注意,我不限于