代码之家  ›  专栏  ›  技术社区  ›  vico

在Maven项目中放置dll的位置

  •  0
  • vico  · 技术社区  · 6 年前

    升级版

    我已经把 sqljdbc_auth.dll src/main/resources ,但这没有帮助:

    2019-02-01T15:06:02.138+0200 INFO user.dir=C:\projects\eclipse_workspace\RFIDGates
    Feb 01, 2019 3:06:02 PM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
    WARNING: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path
    2019-02-01T15:06:16.927+0200 ERROR Get conn exception
    com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication. ClientConnectionId:68da04a3-d764-4c5d-a7ad-addd324db006
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2670) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:79) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3381) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:85) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3373) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7344) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2713) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2261) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1921) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1762) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1077) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:623) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        at java.sql.DriverManager.getConnection(DriverManager.java:664) ~[?:1.8.0_171]
        at java.sql.DriverManager.getConnection(DriverManager.java:247) ~[?:1.8.0_171]
        at com.kpv.rfid.db.ConnectMSSQLServer.main(ConnectMSSQLServer.java:270) [classes/:?]
    Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) ~[?:1.8.0_171]
        at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[?:1.8.0_171]
        at java.lang.System.loadLibrary(System.java:1122) ~[?:1.8.0_171]
        at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<clinit>(AuthenticationJNI.java:54) ~[mssql-jdbc-6.4.0.jre8.jar:?]
        ... 13 more
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Ramesh Subramanian    6 年前

    如果已经有了.dll文件,只需将其存储在项目的src/main/resources目录中,Maven就会将其放在目标jar的根目录中。

        2
  •  0
  •   Alex    6 年前

    可以将dll文件放在文件系统中的任何位置。您只需确保JVM知道它们的路径。

    java.library.path 变量,其中包含指向磁盘上的dll的路径。

    在Eclipse中,可以通过修改 eclipse.ini 文件位于eclipse安装的根文件夹中,或者可以在“Arguments”选项卡->“VM Arguments”中为每个运行配置执行此操作。

    -Djava.library.path=<path-to-your-dll>
    

    如果将应用程序打包为一个可运行的jar,同样适用。在这种情况下,命令是:

    java -Djava.library.path=<path-to-your-dll> -jar myjar.jar
    

    但是,您需要知道这样一个事实,即您的dll也可能有依赖项,并且这些依赖项是由操作系统解析的。从本质上讲,在系统路径变量中也包含指向dll的路径是一个好主意。

    更新

    -vmargs 行:

    -vmargs
    -Djava.library.path=<path-to-your-dll>
    .....