2

这是我的 shadowJar 任务

shadowJar {
    archiveName "server.jar"
    mainClassName = "myapp.ApplicationKt"
    manifest {
        attributes(
                'Class-Path': project.configurations.compile.collect { it.getName() }.join(' ')
        )
    }
    minimize {
//        exclude(dependency('.*:.*:.*'))
    }
    from sourceSets.main.output
}

请注意注释排除行删除任何依赖项被最小化(有效地禁用 shadowJar)。当我取消注释时,生成的 jar 就可以工作了。但是,shadowJar 的最小化删除了一些在运行时实际加载的依赖项,似乎存在一些问题:

这是我不断收到的错误:

2020-02-09 16:39:01.843 [main] INFO  ktor.application - No ktor.deployment.watch patterns specified, automatic reload is not active
Exception in thread "main" java.util.ServiceConfigurationError: org.jetbrains.exposed.sql.DatabaseConnectionAutoRegistration: Provider org.jetbrains.exposed.jdbc.ExposedConnectionImpl not found
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
        at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at kotlin.collections.CollectionsKt___CollectionsKt.firstOrNull(_Collections.kt:224)
        at org.jetbrains.exposed.sql.Database.<clinit>(Database.kt:64)
        at myapp.DB.init(DB.kt:23)
        at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.instantiateAndConfigureApplication(ApplicationEngineEnvironmentReloading.kt:293)
        at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.createApplication(ApplicationEngineEnvironmentReloading.kt:137)
        at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.start(ApplicationEngineEnvironmentReloading.kt:257)
        at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:126)
        at myApp.ApplicationKt.main(Application.kt:35)
        at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:199)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:114)
        at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)

我将 Exposed 数据库库与 mysql 驱动程序一起使用。这是我连接到公开数据库的方式

        Database.connect(
            driver = "com.mysql.cj.jdbc.Driver",

我相信问题出在这附近。它无法在运行时找到数据库驱动程序。

我已经尝试了明显的:排除暴露的、sql、mysql-connector-java 依赖项无济于事。

4

0 回答 0