Kotlin:运行jar时发生异常,缺少驱动程序

Kotlin:运行jar时发生异常,缺少驱动程序,jar,kotlin,hikaricp,jtds,Jar,Kotlin,Hikaricp,Jtds,我正在尝试将基于gradle的kotlin应用程序连接到mssql数据库(通过模块hikari和hibernate fw)。 当我在IDE(intellij Idea)中运行kotlin应用程序时,一切正常,但当我通过gradlew编译它时,它抛出异常,它缺少驱动程序,我不知道如何将其嵌入jar。我尝试过谷歌搜索,找到了一些关于在jar的类路径中添加驱动程序的东西,但运气不好。 尝试了驱动程序编译组:“net.sourceforge.jtds”,名称:“jtds”,版本:“1.3.1”,但也没有

我正在尝试将基于gradle的kotlin应用程序连接到mssql数据库(通过模块hikari和hibernate fw)。 当我在IDE(intellij Idea)中运行kotlin应用程序时,一切正常,但当我通过gradlew编译它时,它抛出异常,它缺少驱动程序,我不知道如何将其嵌入jar。我尝试过谷歌搜索,找到了一些关于在jar的类路径中添加驱动程序的东西,但运气不好。 尝试了驱动程序编译组:“net.sourceforge.jtds”,名称:“jtds”,版本:“1.3.1”,但也没有成功

具有数据库处理程序的模块具有build.gradle

apply plugin: 'java'
apply plugin: 'kotlin'

sourceCompatibility = 1.8
targetCompatibility = 1.8

ext {
    kotlinVersion = '1.1.50'
    jUnitVersion = '4.12'
    jacksonVersion = '2.8.6'
    networkntVersion = '0.1.7'
    jsoupVersion = '1.10.3'
    slf4jVersion = '1.7.21'
    elasticSearchVersion = '5.6.5'
    hikariCpVersion = '2.6.1'
    hibernateVersion = '5.2.10.Final'
    redisVersion = '2.9.0'
    mysqlVersion = '6.0.6'
    jtdsVersion = '1.3.1'
    rabbitMqVersion = '4.2.0'
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
/* BUILDSCRIPT */

buildscript {
    ext.kotlinVersion = '1.1.50'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlinVersion"
    }
}

repositories { mavenCentral() }

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion"
    testCompile group: 'junit', name: 'junit', version: "$jUnitVersion"

    // kotlin-reflect as explicit dependency because of compilation errors in gradle
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
        compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: "$jacksonVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "$jacksonVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: "$jacksonVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-kotlin
    compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: "$jacksonVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: "$jacksonVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jdk8', version: "$jacksonVersion"

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml
    compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: "$jacksonVersion"

    // json schema validator (based on jackson)
    compile group: 'com.networknt', name: 'json-schema-validator', version: "$networkntVersion"

    // html parser
    compile "org.jsoup:jsoup:$jsoupVersion"

    // logging
    compile group: 'org.slf4j', name: 'slf4j-api', version: "$slf4jVersion"
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: "$slf4jVersion"

    // ckf.upe.common.elastic

    // https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch
    // https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.6/transport-client.html
    compile group: 'org.elasticsearch.client', name: 'transport', version: "$elasticSearchVersion"

    // ckf.upe.common.database

    // connection pool
    // https://github.com/brettwooldridge/HikariCP
    compile group: 'com.zaxxer', name: 'HikariCP', version: "$hikariCpVersion"

    // hibernate
    compile group: 'org.hibernate', name: 'hibernate-core', version: "$hibernateVersion"
    // hibernate-hikaricp
    // https://mvnrepository.com/artifact/org.hibernate/hibernate-hikaricp
    compile group: 'org.hibernate', name: 'hibernate-hikaricp', version: "$hibernateVersion"

    // https://mvnrepository.com/artifact/redis.clients/jedis
    // https://github.com/xetorthio/jedis
    compile group: 'redis.clients', name: 'jedis', version: "$redisVersion"
}
运行jar文件时引发的异常为:

Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
        at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
        at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
        at ckf.upe.application.App.getSessionFactory(App.kt:104)
        at ckf.upe.fischer.database.MappingRepository.sessionFactory(MappingRepository.kt:13)
        at ckf.upe.common.sql.AbstractRepository.withSession(AbstractRepository.kt:21)
        at ckf.upe.mapping.service.MappingService.loadMapping(MappingService.kt:33)
        at ckf.upe.application.upe.MainKt.main(main.kt:41)
Caused by: org.hibernate.HibernateException: java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:jtds:sqlserver://devsql2.fischer:1433/CKFischer_Mapping_PROD;useLOBs=false
        at org.hibernate.hikaricp.internal.HikariCPConnectionProvider.configure(HikariCPConnectionProvider.java:63)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
        ... 18 more
Caused by: java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:jtds:sqlserver://devsql2.fischer:1433/CKFischer_Mapping_PROD;useLOBs=false
        at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:88)
        at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:323)
        at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:114)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:105)
        at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:72)
        at org.hibernate.hikaricp.internal.HikariCPConnectionProvider.configure(HikariCPConnectionProvider.java:59)
        ... 26 more
Caused by: java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(Unknown Source)
        at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:81)
        ... 31 more
线程“main”org.hibernate.service.spi.ServiceException中的异常:无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.jdbc环境] 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) 位于org.hibernate.engine.jdbc.internal.jdbcservicesiml.configure(jdbcservicesiml.java:51) 位于org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) 位于org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) 位于org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) 位于org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83) 位于org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418) 位于org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87) 位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691) 位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726) 位于ckf.upe.application.App.getSessionFactory(App.kt:104) 位于ckf.upe.fischer.database.MappingRepository.sessionFactory(MappingRepository.kt:13) 位于ckf.upe.common.sql.AbstractRepository.withSession(AbstractRepository.kt:21) 在ckf.upe.mapping.service.MappingService.loadMapping(MappingService.kt:33)中 位于ckf.upe.application.upe.MainKt.main(main.kt:41) 原因:org.hibernate.HibernateException:java.lang.RuntimeException:无法获取jdbcUrl=jdbc:jtds的驱动程序实例:sqlserver://devsql2.fischer:1433/CKFischer_Mapping_PROD;useLOBs=false 位于org.hibernate.hikaricp.internal.HikariCPConnectionProvider.configure(HikariCPConnectionProvider.java:63) 位于org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) 位于org.hibernate.engine.jdbc.env.internal.jdbconvironmentinitiator.buildJdbcConnectionAccess(jdbconvironmentinitiator.java:145) 位于org.hibernate.engine.jdbc.env.internal.jdbconvironmentinitiator.initiateService(jdbconvironmentinitiator.java:66) 位于org.hibernate.engine.jdbc.env.internal.jdbconvironmentinitiator.initiateService(jdbconvironmentinitiator.java:35) 位于org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) 位于org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) ... 还有18个 原因:java.lang.RuntimeException:无法获取jdbcUrl=jdbc:jtds的驱动程序实例:sqlserver://devsql2.fischer:1433/CKFischer_Mapping_PROD;useLOBs=false 位于com.zaxxer.hikari.util.DriverDataSource。(DriverDataSource.java:88) 位于com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:323) 位于com.zaxxer.hikari.pool.PoolBase。(PoolBase.java:114) 在com.zaxxer.hikari.pool.HikariPool上。(HikariPool.java:105) 在com.zaxxer.hikari.HikariDataSource。(HikariDataSource.java:72) 位于org.hibernate.hikaricp.internal.HikariCPConnectionProvider.configure(HikariCPConnectionProvider.java:59) ... 26多 原因:java.sql.SQLException:没有合适的驱动程序 位于java.sql.DriverManager.getDriver(未知源) 位于com.zaxxer.hikari.util.DriverDataSource。(DriverDataSource.java:81) ... 还有31个
好的,找到了@Hannes提到的解决方案,您需要在应用程序中显式实例化驱动程序,如
Class.forName(“net.sourceforge.jtds.jdbc.driver”).newInstance()。更多信息请点击此处:

我看不出对
jtds
有任何依赖关系,这是您的
依赖关系
部分。好的,很抱歉,尝试了很多东西,粘贴了没有它的代码。编译组:'net.sourceforge.jtds',名称:'jtds',版本:'1.3.1'在依赖项中-不起作用…您是否已将范围设置为
运行时
?@Hannes刚才尝试过,但
不起作用。我想,它是运行时组:'net.sourceforge.jtds',名称:'jtds',版本:'1.3.1',在build.gradle的依赖项部分,它不应该在buildscript依赖项中吗?
jar文件在运行时必须在那里。我能想到的唯一一件事就是它没有注册。在连接之前,请尝试旧的
Class.forName(“net.sourceforge.jtds.jdbc.Driver”).newInstance()