【问题标题】:Gradle kotlin in Gradle5.2 Unresolved reference: dependtestGradle5.2 中的 Gradle kotlin 未解决的参考:dependtest
【发布时间】:2019-09-17 18:59:08
【问题描述】:

一个使用 Kotlin 源代码的多模块项目,以前可以工作,升级到 Gradle 5.2 后停止工作,因为找不到 compile project('depend-test') 依赖项中的 Kotlin 类。

  1. 已尝试更改插件版本
  2. 已经看过https://github.com/gradle/gradle/issues/8980

我在项目中定义Test类('depend-test')

object Test {
    const val test = "123"
}

我想在项目中使用Test 类('test-test')

package com.example.test.controller

import com.example.dependtest.Test
import org.slf4j.LoggerFactory
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping
class TestController {

    private val log = LoggerFactory.getLogger(TestController::class.java)

    @GetMapping(value = ["/test"])
    fun test() {
        log.info(Test.test)
    }
}

当我想将项目('test-test')构建到我使用 gradle bootJar 的 jar 时。我收到此错误:


> Task :test-test:compileKotlin FAILED
e: /Users/houshuai/Documents/dev/demo/test/test-test/src/main/kotlin/com/example/test/controller/TestController.kt: (3, 20): Unresolved reference: dependtest
e: /Users/houshuai/Documents/dev/demo/test/test-test/src/main/kotlin/com/example/test/controller/TestController.kt: (22, 18): Unresolved reference: Test

预期行为 compile project('depend-test')依赖中的Kotlin类应该可以找到。

当前行为 compile project('depend-test')依赖中的Kotlin类没有找到:

【问题讨论】:

    标签: spring-boot gradle kotlin gradle-kotlin-dsl


    【解决方案1】:

    尝试将其添加到您的 build.gradle 文件中

    bootJar {
      enabled = false
    }
    
    jar {
      enabled = true
    }
    

    以防万一其他人遇到这个问题。

    【讨论】:

      【解决方案2】:

      我创建了两个模块,test-test 和depend-test。 依赖测试项目是 test-test 的依赖。 尝试调用depend-test的参数,编译打包失败。

      环境

      • gradle-5.2.1
      • Kotlin 1.3.31
      • Springboot 2.1.4
      • java 1.8

      第一步

      • 编辑 settings.gradle
      rootProject.name = 'demo'
      include ":depend-test"
      include ":test-test"
      project(":depend-test").projectDir = file("depend/depend-test")
      project(":test-test").projectDir = file("test/test-test")
      
      • 我用的是1.3.31版本的kotlin插件。 build.gradle 文件内容如下
      buildscript {
          ext {
              kotlinVersion = '1.3.31'
          }
          repositories {
              mavenCentral()
              maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
              maven { url "https://plugins.gradle.org/m2/" }
          }
          dependencies {
              classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
              classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion"
          }
      }
      
      
      plugins {
          id 'org.springframework.boot' version '2.1.4.RELEASE'
          id 'org.jetbrains.kotlin.jvm' version '1.2.71'
          id 'org.jetbrains.kotlin.plugin.spring' version '1.2.71'
      }
      
      
      allprojects {
          apply plugin: 'idea'
          apply plugin: 'kotlin'
      
          repositories {
              mavenCentral()
          }
      }
      
      subprojects {
          apply plugin: 'kotlin'
          apply plugin: 'java'
          apply plugin: 'eclipse'
          apply plugin: "application"
          apply plugin: 'org.springframework.boot'
          apply plugin: 'io.spring.dependency-management'
      
          repositories {
              mavenLocal()
              maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
              maven { url "https://plugins.gradle.org/m2/" }
              mavenCentral()
              jcenter()
              maven { url "http://repo.spring.io/snapshot" }
              maven { url "http://repo.spring.io/milestone" }
              maven { url 'http://maven.springframework.org/release' }
              maven { url 'http://maven.springframework.org/milestone' }
          }
      
          version = '1.0'
          apply plugin: 'io.spring.dependency-management'
      
          group = 'com.mutil.test'
          sourceCompatibility = '1.8'
      
          compileKotlin {
              kotlinOptions {
                  freeCompilerArgs = ['-Xjsr305=strict']
                  jvmTarget = '1.8'
              }
          }
      
          compileTestKotlin {
              kotlinOptions {
                  freeCompilerArgs = ['-Xjsr305=strict']
                  jvmTarget = '1.8'
              }
          }
      
          dependencies {
              implementation 'org.springframework.boot:spring-boot-starter'
              implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
              implementation 'org.jetbrains.kotlin:kotlin-reflect'
              implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
              testImplementation 'org.springframework.boot:spring-boot-starter-test'
          }
      }
      
      dependencies {
          subprojects.forEach {
              archives(it)
          }
      }
      
      repositories {
          mavenCentral()
      }
      
      

      第二步

      为test-test项目构建jar,我用了两种方式,但是结果是一样的。

      • 终端使用的cmd是./gradlew :test-test:bootJar
      • 用户 IDEA gradle 工具

      结果

      在子模块中找不到kotlin写的class文件。

      不知道是不是缺少必要的插件导致无法正确打包。

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 2019-06-19
        相关资源
        最近更新 更多