首页 > 解决方案 > 当类在不同的模块中时,ClassLoader.loadClass 方法上的 ClassNotFound 异常

问题描述

我在 UserServiceApplication.kt 文件中得到 ClassNotFound 异常。

下面是我的项目结构。

Root Project
     |
     |---settings.gradle
     |
     |---common (library module) (Spring boot project)
     |      |
     |      |--build.gradle
     |      |--src/main/kotlin/com/simbalarry/common/util/StringValidator.kt
     |      |--src/main/kotlin/com/simbalarry/common/MainApp.kt
     |      |
     |---user-manager (Spring boot project) (uses common)
     |      |--build.gradle
     |      |--src/main/kotlin/somepackage/UserServiceApplication.kt

所有文件的内容 RootProject/settings.gradle

include ':common', ':user-manager'
rootProject.name = 'home-cuisine'

普通/build.gradle

plugins {
    id 'java-library'
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'org.jetbrains.kotlin.jvm' version '1.2.71'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.2.71'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.simbalarry'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

ext['kotlin.version'] = '1.2.71'

dependencies {
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}

common/com/simbalarry/common/util/StringValidator.kt

package com.simbalarry.common.util

class StringValidator {
  fun hello(): String {
    return "Bye"
  }
}

common/com/simbalarry/common/MainApp.kt

package com.simbalarry.common

class MainApp

fun main(args: Array<String>) {
}

用户管理器/build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'org.jetbrains.kotlin.jvm' version '1.2.71'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.2.71'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.simbalarry'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

test {
    useJUnitPlatform()
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/snapshot' }
    maven { url 'https://repo.spring.io/milestone' }
}

dependencies {
    implementation project(':common')
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}

用户管理器/UserServiceApplication.kt

package com.simbalarry.usermanager

import com.simbalarry.common.util.StringValidator

class UserServiceApplication

fun main(args: Array<String>) {
  println("Hieex")
  val stringValidator = StringValidator()
}

当我对用户管理器包执行 gradle bootRun 时,我得到以下异常

E:\Repos\HC7\user-manager>gradle bootRun

> Task :user-manager:bootRun FAILED
Hieex
Exception in thread "main" java.lang.NoClassDefFoundError: com/simbalarry/common/util/StringValidator
        at com.simbalarry.usermanager.UserServiceApplicationKt.main(UserServiceApplication.kt:9)
Caused by: java.lang.ClassNotFoundException: com.simbalarry.common.util.StringValidator
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':user-manager:bootRun'.
> Process 'command 'C:\Program Files\Java\jdk1.8.0_181\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.2.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 4s
4 actionable tasks: 1 executed, 3 up-to-date

谁能指导我这个项目出了什么问题。我在更大的项目中遇到了这个问题,但我在这里粘贴了缩小的问题。

标签: javaspring-bootgradlekotlin

解决方案


推荐阅读