添加keycloak-installed-adapter会导致应用程序由于java.lang.ClassNotFoundException而崩溃

问题描述

我有一个小的TornadoFx桌面客户端应用程序。最近,我在后端实现了Keycloak。我想利用keycloak-installed-adapter进行身份验证。不幸的是,当我导入库时,因为找不到主类,所以在java -jar <jarfile>时应用程序将无法启动-我得到:

java.lang.classNotFoundException: pl.myapp.desktop.AppApplication
        at java.net.urlclassloader.findClass(urlclassloader.java:382)
        at java.lang.classLoader.loadClass(ClassLoader.java:424)
        at java.lang.classLoader.loadClass(ClassLoader.java:357)
        at fxlauncher.AbstractLauncher.createApplicationEnvironment(AbstractLauncher.java:170)
        at fxlauncher.Launcher.lambda$start$0(Launcher.java:152)
        at java.lang.Thread.run(Thread.java:748)

从IDE启动应用程序没有问题。从IDE和Terminal运行时,我确定我使用的是同一个Java可执行文件

我的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'no.tornado:fxlauncher-gradle-plugin:1.0.20'
    }
}

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.70'
    id 'application'
}

apply plugin: 'no.tornado.fxlauncher'
fxlauncher {
    applicationvendor 'myapp-Desktop'
    applicationUrl 'https://www.myapp.com/app'
    whatsNew 'https://www.myapp.com/new.html'
    applicationMainClass 'pl.myapp.desktop.AppApplication'
    acceptDowngrade true
}

group 'myapp-desktop'
version '1.3.0'

sourceCompatibility = 1.8

application{
    mainClassName "pl.myapp.desktop.AppApplication"
}

jar {
    manifest {
        attributes(
                'Main-Class': 'pl.myapp.desktop.AppApplication'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

applicationDefaultJvmArgs = ["-xms1024m","-Xmx2048m"]

repositories {
    mavenCentral()
    jcenter()
    maven {
        setUrl("https://plugins.gradle.org/m2/")
    }
}

task deploy(type: Exec){
    dependsOn 'embedApplicationManifest'
    commandLine 'sh','./deploy.sh'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

    implementation "no.tornado:tornadofx:1.7.17"
    implementation 'org.codehaus.griffon:griffon-javafx:2.15.0'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
    implementation 'com.github.kittinunf.fuel:fuel:2.2.2'
    implementation 'com.github.kittinunf.fuel:fuel-gson:2.2.2'
    implementation 'com.github.kittinunf.fuel:fuel-jackson:2.2.2'
    implementation 'org.zeroturnaround:zt-zip:1.14'

    implementation "com.fasterxml.jackson.datatype:jackson-datatype-hppc:2.11.0"
    implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0"
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0'
    implementation "com.fasterxml.jackson.core:jackson-annotations:2.11.0"
    implementation "com.fasterxml.jackson.core:jackson-databind:2.11.0"
    implementation "com.fasterxml.jackson.module:jackson-module-afterburner:2.11.0"
    implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.11.0"

    implementation("org.keycloak:keycloak-installed-adapter:10.0.2")

    testImplementation "com.google.truth:truth:1.0"
    testImplementation 'org.amshove.kluent:kluent:1.56'

    testImplementation group: 'junit',name: 'junit',version: '4.12'
}

compileKotlin {
    kotlinoptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinoptions.jvmTarget = "1.8"
}

最小应用:

package pl.myapp.desktop

import javafx.stage.Stage
import pl.myapp.desktop.view.login.LoginView
import tornadofx.*

class AppApplication : App(LoginView::class) {

    override fun start(stage: Stage) {
        super.start(stage)
        with(stage) {
            centerOnScreen()
        }
    }
}

项目结构:

projectRoot:
|
----src
     |
     ---main
          |
          ----- kotlin (code here)
          |
          ----- resources
                    |
                    ------meta-inf
                              |
                              ----- keycloak.json

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)