log4j2 и JetBrains Выявленная проблема: невозможно проанализировать параметр ssl.key.password.callback

Я интегрировал поддержку PostgreSQL через Exposed DAO, и в IDE (Idea) все прошло гладко, но после компиляции jar-файла начались странные ошибки, которых я не могу найти ни в гугле, ни здесь.

Вот кусок кода, который вызывает проблемы:

fun main(args: Array<String>) {
    var appConfigPath: String
    val logger = logger("main")
    val version = "0.0.3-alpha"

    // Sentry initializer
    try {
        throw Exception("Application initialized")
    } catch (e: Exception) {
        logger.info(e)
    }

    //  Parse command line arguments
    ...

    val dataSource = try {
        PGDataSource().apply {
            serverName = appConfig.db.serverName
            databaseName = appConfig.db.databaseName
            user = appConfig.db.user
            password = appConfig.db.password
        }
    } catch (e: Exception) {
        logger.fatal("Unable to create data source", e)
        exitProcess(-1)
    }

И вот что я получаю в командной строке:

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.impossibl.postgres.jdbc.DataSourceSettings.<clinit>(DataSourceSettings.java:50)
        at com.impossibl.postgres.jdbc.AbstractDataSource.<init>(AbstractDataSource.java:73)
        at com.impossibl.postgres.jdbc.AbstractGeneratedDataSource.<init>(AbstractGeneratedDataSource.java:12)
        at com.impossibl.postgres.jdbc.PGDataSource.<init>(PGDataSource.java:50)
        at com.mazekine.pay2say.MainKt.main(Main.kt:105)
Caused by: java.lang.IllegalArgumentException: Unable to parse setting "ssl.key.password.callback" from 'com.impossibl.postgres.protocol.ssl.ConsolePasswordCallbackHandler'
        at com.impossibl.postgres.system.Setting.fromString(Setting.java:692)
        at com.impossibl.postgres.system.Setting.init(Setting.java:554)
        at com.impossibl.postgres.system.SystemSettingsInit.init(SystemSettingsInit.java:36)
        at com.impossibl.postgres.system.SystemSettings.<clinit>(SystemSettings.java:354)
        ... 5 more

Приложение скомпилировано с целью Java 11 через Adpot-OpenJDK.

Первая ошибка заключается в том, чтобы иметь дело с log4j2. Я попробовал все решения, предложенные здесь, но это не помогло. не помогает, поэтому я думаю, что основная проблема связана с Exposed DAO, но я могу ошибаться.

Что касается самого DAO, я инициализирую подключение к локальному источнику данных PostgreSQL 13 из файла конфигурации:

{
    "db": {
        "server_name": "localhost",
        "database_name": "silence",
        "user": "silence_connect",
        "password": "test1234"
    }
}

Самое странное, что внутри IntelliJ Idea все работает нормально, а после того, как я скомпилирую банку через Shadow, она перестает работать.

Вот также build.gradle.kts со всеми зависимостями:

plugins {
    kotlin("jvm") version "1.4.31"
    application
    java
    id("com.github.johnrengelman.shadow") version "6.1.0"
}

group = "com.mazekine"
version = "0.0.2-alpha"

//  Version variables
val novaLibVersion = "0.0.5-alpha"
val telegramBotVersion = "6.0.1"
val exposedVersion = "0.29.1"
val pgJDBCVersion = "0.8.6"
val jvmTargetVersion = "11"

repositories {
    mavenCentral()
    jcenter()
    maven { url = uri("https://jitpack.io") }
}

dependencies {
    implementation(kotlin("stdlib", "1.3.0"))
    implementation("org.jetbrains.kotlin:kotlin-reflect:1.3.0")

    //  Broxus
    implementation("com.broxus:nova-lib:$novaLibVersion")

    //  Kotlin Telegram Bot
    implementation("io.github.kotlin-telegram-bot.kotlin-telegram-bot:telegram:$telegramBotVersion")

    //  Exposed
    implementation("org.jetbrains.exposed:exposed-core:$exposedVersion")
    implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion")
    implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
    implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion")
    implementation("com.impossibl.pgjdbc-ng:pgjdbc-ng:$pgJDBCVersion")

    //  Logging
    implementation("org.apache.logging.log4j:log4j-api-kotlin:1.0.0")
    implementation("org.apache.logging.log4j:log4j-api:2.13.3")
    implementation("org.apache.logging.log4j:log4j-core:2.13.3")
    implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.13.3")
    implementation("org.apache.logging.log4j:log4j-to-slf4j:2.13.3")

    implementation("ch.qos.logback:logback-classic:1.2.3")
    implementation("ch.qos.logback:logback-core:1.2.3")

    implementation("io.sentry:sentry-log4j2:4.2.0")

    //  State machine
    implementation("com.ToxicBakery.kfinstatemachine:kfin:4.3.50")
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>() {
    kotlinOptions.jvmTarget = "1.8"
}.forEach {
    it.kotlinOptions { freeCompilerArgs = listOf("-Xnew-inference") }
}

application {
    mainClassName = "com.mazekine.pay2say.MainKt"    //  Have to leave it here until shadowJar fixes the compatibility bug
    mainClass.set("com.mazekine.pay2say.MainKt")
}

val compileKotlin: org.jetbrains.kotlin.gradle.tasks.KotlinCompile by tasks
compileKotlin.kotlinOptions {
    jvmTarget = jvmTargetVersion
}

val compileTestKotlin: org.jetbrains.kotlin.gradle.tasks.KotlinCompile by tasks
compileTestKotlin.kotlinOptions {
    jvmTarget = jvmTargetVersion
}

tasks.jar {
    archiveBaseName.set("pay2say")
    archiveVersion.set("")
    archiveClassifier.set("")
    archiveExtension.set("jar")
    manifest.attributes["Main-Class"] = "com.mazekine.pay2say.MainKt"
}

tasks.shadowJar {
    archiveBaseName.set("pay2say")
    archiveVersion.set("")
    archiveClassifier.set("")
    archiveExtension.set("jar")
    minimize()
}

Любые идеи, что я делаю неправильно?


person cryonyx    schedule 03.03.2021    source источник