Неразрешенная зависимость от пакета в подпроекте - PullRequest
0 голосов
/ 14 декабря 2018

В моем проекте весенней загрузки Kotlin я использую Kotlin DSL Gradle с тремя подпроектами.Два из которых security, что зависит от database.

В IntelliJ приложение работает успешно и работает как положено (при запуске в качестве конфигурации запуска приложения Spring Boot).

Однако, когда я пытаюсь построить проект с Gradle ./gradlew clean build Iget

e: /security/src/main/kotlin/com/path/security/jwt/JwtRealm.kt: (3, 26): Unresolved reference: database
e: /security/src/main/kotlin/com/path/security/jwt/JwtRealm.kt: (19, 24): Unresolved reference: UsersRepository
e: /security/src/main/kotlin/com/path/security/jwt/JwtRealm.kt: (36, 48): Unresolved reference: it
e: /security/src/main/kotlin/com/path/security/jwt/JwtRealm.kt: (38, 42): Unresolved reference: it
e: /security/src/main/kotlin/com/path/security/jwt/JwtRealm.kt: (38, 75): Unresolved reference: it
e: /security/src/main/kotlin/com/path/security/jwt/JwtRealm.kt: (40, 63): Unresolved reference: it
> Task :security:compileKotlin FAILED

Фактическая строка, на которую он жалуется:

import com.path.database.repositories.UsersRepository

Ошибка it - это значения из репо.Класс UserRepository находится в модуле database, а JwtRealm находится в модуле security.

Файл My build.gradle.kts в модуле security выглядит следующим образом:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

group = "com.path"
version = "1.0-SNAPSHOT"

plugins {
    kotlin("jvm")
    id("org.jetbrains.kotlin.plugin.spring") 
    id("org.jetbrains.kotlin.plugin.noarg") 
    id("org.jetbrains.kotlin.plugin.jpa") 
    id("org.springframework.boot")
    id("io.spring.dependency-management")
}

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation(kotlin("reflect"))

    implementation(project(":database"))

    implementation("org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-actuator:2.1.1.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-jdbc:2.1.1.RELEASE")

    implementation("org.apache.shiro:shiro-spring-boot-web-starter:1.4.0")
    implementation("com.h2database:h2:1.4.197")
    implementation("com.auth0:java-jwt:3.4.1")
    implementation("io.github.microutils:kotlin-logging:1.6.22")
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
}

Что в основном совпадает с моими корневыми файлами Gradle проекта, только содержит ссылки на все подпроекты (или модули).Я также перечислил все подпроекты в settings.gradle.kts

IntelliJ не имеет проблем с запуском или просмотром этого кода, нет выделенных ошибок или предупреждений.

У меня есть @Configurationаннотированный класс как корень каждого модуля с аннотацией @ComponentScan.

Чего мне не хватает?

1 Ответ

0 голосов
/ 17 декабря 2018

После долгих копаний я обнаружил, что это проблема Spring Boot.Я исправил это, применив

bootJar.enabled = false  
jar.enabled = true

к каждому из подпроектов.В KotlinDSL это:

tasks.withType<BootJar> {
    enabled = false
}
tasks.withType<Jar> {
    enabled = true
}

Надеюсь, это поможет кому-то еще, так как я нашел эту проблему только после долгих копаний.Источник решения здесь: https://github.com/gradle/kotlin-dsl/issues/393

...