未解决的对子项目中包的依赖
Unresolved Dependency on package in subproject
在我的 Kotlin spring 启动项目中,我使用 Kotlin DSL Gradle,有三个子项目。其中两个是 security
,这取决于 database
。
在 IntelliJ 中,应用程序 运行 成功并按预期执行(当 运行 作为 Spring 引导应用程序 运行 配置时)。
但是,当我尝试使用 Gradle ./gradlew clean build
构建项目时,我得到
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
错误是来自 repo 的值。 UserRepository
class 在模块 database
中,JwtRealm
在 security
模块中。
我在 security
模块中的 build.gradle.kts
文件如下所示:
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 没有问题运行ning,或者浏览这段代码,没有突出显示的错误或警告。
我有一个 @Configuration
注释 class 作为每个模块的根,还带有 @ComponentScan
注释。
我错过了什么?
经过大量挖掘,我发现这是一个 Spring 引导问题。我通过应用
解决了这个问题
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
在我的 Kotlin spring 启动项目中,我使用 Kotlin DSL Gradle,有三个子项目。其中两个是 security
,这取决于 database
。
在 IntelliJ 中,应用程序 运行 成功并按预期执行(当 运行 作为 Spring 引导应用程序 运行 配置时)。
但是,当我尝试使用 Gradle ./gradlew clean build
构建项目时,我得到
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
错误是来自 repo 的值。 UserRepository
class 在模块 database
中,JwtRealm
在 security
模块中。
我在 security
模块中的 build.gradle.kts
文件如下所示:
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 没有问题运行ning,或者浏览这段代码,没有突出显示的错误或警告。
我有一个 @Configuration
注释 class 作为每个模块的根,还带有 @ComponentScan
注释。
我错过了什么?
经过大量挖掘,我发现这是一个 Spring 引导问题。我通过应用
解决了这个问题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