idea在运行时正常,但打包成一个jar运行文件时出现Could not load JNR C Library问题

在通过java连接cassandra时,其中com.datastax.driver.core是通过maven加入的,通过Idea运行时是正常的,在导出jar时如果不是将所有的jar打包成一个jar时也是正常的,但是如果将所有的第三方打包成jar,则会出现如下错误:

17:38:14.973 [main] DEBUG com.datastax.driver.core.Native - Could not load JNR C Library, native system calls through this library will not be available
java.lang.UnsatisfiedLinkError: unknown
    at jnr.ffi.provider.jffi.NativeLibrary.loadNativeLibraries(NativeLibrary.java:87)
    at jnr.ffi.provider.jffi.NativeLibrary.getNativeLibraries(NativeLibrary.java:70)
    at jnr.ffi.provider.jffi.NativeLibrary.getSymbolAddress(NativeLibrary.java:49)
    at jnr.ffi.provider.jffi.NativeLibrary.findSymbolAddress(NativeLibrary.java:59)
    at jnr.ffi.provider.jffi.AsmLibraryLoader.generateInterfaceImpl(AsmLibraryLoader.java:158)
    at jnr.ffi.provider.jffi.AsmLibraryLoader.loadLibrary(AsmLibraryLoader.java:89)
    at jnr.ffi.provider.jffi.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:44)
    at jnr.ffi.LibraryLoader.load(LibraryLoader.java:325)
    at jnr.ffi.LibraryLoader.load(LibraryLoader.java:304)
    at com.datastax.driver.core.Native$LibCLoader.(Native.java:104)
    at com.datastax.driver.core.Native.isGettimeofdayAvailable(Native.java:189)
    at com.datastax.driver.core.ClockFactory.newInstance(Clock.java:56)
    at com.datastax.driver.core.AbstractMonotonicTimestampGenerator.(AbstractMonotonicTimestampGenerator.java:42)
    at com.datastax.driver.core.LoggingMonotonicTimestampGenerator.(LoggingMonotonicTimestampGenerator.java:53)
    at com.datastax.driver.core.AtomicMonotonicTimestampGenerator.(AtomicMonotonicTimestampGenerator.java:55)
    at com.datastax.driver.core.AtomicMonotonicTimestampGenerator.(AtomicMonotonicTimestampGenerator.java:37)
    at com.datastax.driver.core.policies.Policies.defaultTimestampGenerator(Policies.java:123)
    at com.datastax.driver.core.policies.Policies$Builder.build(Policies.java:287)
    at com.datastax.driver.core.Cluster$Builder.getConfiguration(Cluster.java:1354)
    at com.datastax.driver.core.Cluster.(Cluster.java:163)
    at com.datastax.driver.core.Cluster.buildFrom(Cluster.java:227)
    at com.datastax.driver.core.Cluster$Builder.build(Cluster.java:1371)
    at com.wincom.mstar.writedb.cas.CasDB.init(CasDB.java:37)
    at com.wincom.mstar.writedb.app.Application.run(Application.java:51)
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
    at com.wincom.mstar.writedb.app.Application.main(Application.java:40)

出现这种问题主要是使用了jnr-ffi包引起的,如果用java 32bit运行测需要使用jnr-x86asm,如果是java64 bit运行测需要使用jnr-ffi


            com.github.jnr
            jnr-ffi
            2.1.9
       

将jnr-ffi更换成jnr-x86asm包即可:


            com.github.jnr
            jnr-x86asm
            1.0.2
       

你可能感兴趣的:(idea在运行时正常,但打包成一个jar运行文件时出现Could not load JNR C Library问题)