RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1079179
Accepted
titaniche
titaniche
Asked:2020-02-06 20:45:06 +0000 UTC2020-02-06 20:45:06 +0000 UTC 2020-02-06 20:45:06 +0000 UTC

Kotlin + Gradle Kotlin DSL + KAPT + MapStruct

  • 772

祝大家有美好的一天。我在尝试将 MapStruct 功能添加到项目时遇到了问题。而且,错误就像滚雪球一样,一个接一个。我会很高兴得到任何帮助。为了:

  1. 对于初学者,我不明白为什么 Intellij IDEA 不能正确理解kapt. 事实上,错误总是出现Unresolverd reference: kapt。同时,IDE 建议导入某个类import org.jetbrains.kotlin.kapt3.base.Kapt.kapt,因此该构造kapt可以在块中使用dependencies,但该类的实例应该作为参数KaptOptions,我似乎根本不需要。如果删除导入,IDE 会发誓unresolved reference: kapt,但项目的构建是成功的。我不会说这很关键,但它会切入眼睛并分散注意力。一般来说,我不希望有任何“红色”文件,此外,IDE 不断建议导入“红色” kapt,这也很不方便。

  2. 该项目有一个实体系统。尝试执行gradle clean build时,出现错误: 实体类e: <path_to_class>\System.java:3: error: System is already defined in this compilation unit import java.lang.System; 中没有导入(原则上,其他任何地方都没有)。例如,如果您将实体重命名为- 错误就会消失,但我不想诉诸这种方法。java.lang.SystemSystemSystemm

package com.sprojects.core.server.model.entity

import java.util.Date
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.FetchType
import javax.persistence.Id
import javax.persistence.JoinColumn
import javax.persistence.ManyToOne
import javax.persistence.OneToMany
import javax.persistence.PreUpdate
import javax.persistence.Table
import javax.persistence.Temporal
import javax.persistence.TemporalType

@Entity
@Table(name = "systems")
data class System(
    // ... Some fields here ... //
) {
   // ... Some code here //
}
  1. 不生成 MapStruct 映射器实现。显然,这个问题与问题 2 密切相关,但无论如何它并不能解决它。试图得到一个映射器:val mapper = Mappers.getMapper(MyConverter::class.java)。错误:java.lang.ClassNotFoundException: Cannot find implementation for com.sprojects.core.server.model.dto.impl.MyConverter。build.gradle.kts 的内容*:
plugins {
    // kotlin
    id("kotlin")
    kotlin("jvm")
    kotlin("kapt")
    kotlin("plugin.spring")
    kotlin("plugin.jpa")
    // Spring
    id("org.springframework.boot")
    id("io.spring.dependency-management")
    // Other
    id("idea")
    id("com.palantir.docker")
    id("org.jlleitschuh.gradle.ktlint")
    id("net.ltgt.apt") version "0.21"
    id("net.ltgt.apt-idea") version "0.21"
}

group = "${rootProject.group}"
version = "${rootProject.version}"
java.sourceCompatibility = JavaVersion.VERSION_1_8
java.targetCompatibility = JavaVersion.VERSION_1_8

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.postgresql:postgresql")
    implementation("io.jsonwebtoken:jjwt:${rootProject.extra["jwtVersion"]}")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:${rootProject.extra["springBootVersion"]}")
    implementation("org.springframework.security:spring-security-jwt:${rootProject.extra["springSecurityJwtVersion"]}")
    implementation("org.springframework.boot:spring-boot-configuration-processor")

    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.security:spring-security-test")
    testImplementation("org.testcontainers:testcontainers:${rootProject.extra["testContainersVersion"]}")
    testImplementation("org.testcontainers:postgresql:${rootProject.extra["testContainersVersion"]}")
    testImplementation("org.springframework.security:spring-security-test")

    implementation(
        group = "io.springfox",
        name = "springfox-swagger2",
        version = "${rootProject.extra["swagger2Version"]}"
    )
    implementation(
        group = "io.springfox",
        name = "springfox-swagger-ui",
        version = "${rootProject.extra["swagger2Version"]}"
    )
    implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
    implementation(
        group = "org.mapstruct",
        name = "mapstruct",
        version = "${rootProject.extra["mapStructVersion"]}"
    )
    // При такой попытке не работает сборка проекта
    kapt("org.mapstruct:mapstruct-processor:${rootProject.extra["mapStructVersion"]}")

    // При такой попытке работает сборка, но не создаются реализации мапперов
    /*annotationProcessor(
        group = "org.mapstruct",
        name = "mapstruct-processor",
        version = "${rootProject.extra["mapStructVersion"]}"
    )*/
}

如果您需要提供更多数据,我会很高兴提供任何帮助 - 我会提供。谢谢你。

更新。问题 1 不相关。IDE 提示帮助:Apply Context.

kotlin
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Сергей Фролов
    2020-02-07T02:39:18Z2020-02-07T02:39:18Z

    该项目有一个实体系统。当我尝试运行 gradle clean build 时,出现错误:e: \System.java:3: error: System is already defined in this compiler unit import java.lang.System; System 实体类中没有 java.lang.System 的导入(原则上没有其他地方)。如果您将实体重命名,例如重命名为 Systemm,错误就会消失,但我不想诉诸这种方法。

    此导入是在代码生成期间添加的,因此会发生冲突。我建议尝试通过为其定义不同的别名来明确指定 java.lang.System 的导入。

    import java.lang.System as javaLangSystem
    
    • 1
  2. Best Answer
    titaniche
    2020-02-07T15:28:16Z2020-02-07T15:28:16Z

    如前所述,问题 3 完全取决于问题 2。

    结果,他做了两件事:

    1. 将 gradle.properties文件添加到项目根目录:

      kapt.include.compile.classpath=false
      kapt.use.worker.api=true
      
    2. 向build.gradle.kts添加了额外的配置:

      kapt {
          correctErrorTypes = true
      }
      

    以防万一:https ://kotlinlang.org/docs/reference/kapt.html

    • 1

相关问题

  • 轻量级线程的定义是什么意思?

  • 删除行首的空格

  • 将列表项与前一项进行比较

  • 在 if-else 条件下是否可以避免大量代码?

  • Kotlin 代码优化

  • 抽象工厂如何在 Kotlin 中工作

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5