Gradle kotlin в Gradle5.2 Неразрешенная ссылка: зависимый тест - PullRequest
0 голосов
/ 29 апреля 2019

Многомодульный проект с исходным кодом Kotlin, который раньше работал, перестает работать после обновления до Gradle 5.2, так как классы Kotlin из зависимости проекта компиляции ('зависимость-тест') не найдены.

  1. Попытка изменить версию плагина
  2. уже просмотрено https://github.com/gradle/gradle/issues/8980

я определяю 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') для jar, где я использовалgradle bootJar。 Я получаю эту ошибку:


> 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

Ожидаемое поведение Должны быть найдены классы Kotlin в зависимости проекта компиляции ('зависимость-тест').

Текущее поведение Классы Kotlin вЗависимости проекта компиляции («зависимость-тест») не найдено:

1 Ответ

0 голосов
/ 30 апреля 2019

Я создал два модуля, тест-тест и зависимый тест. Проект зависимость-тест является зависимостью test-test. Я попытался вызвать параметры зависимость-тест, но он не смог скомпилировать и упаковать.

ко

  • Gradle-5.2.1
  • Котлин 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()
}

второй шаг

сборка jar для проекта test-test, я использовал два способа, но результаты были одинаковыми.

  • использование терминала: ./gradlew :test-test:bootJar
  • пользовательский инструмент IDEA gradle

результат

Файл класса, написанный kotlin в подмодуле, не найден.

Я не знаю, вызвано ли отсутствие необходимых плагинов неправильной упаковкой.

...