繁体   English   中英

在Maven项目中将dll放在哪里

[英]Where to place dll in Maven project

我已经下载了要在Eclipse Maven Java项目中使用的sql jdbc驱动程序。 我应该在哪里放置sqljdbc_auth.dll文件,以便可以在Eclipse IDE中运行项目。 那我该告诉Maven吗?

UPD

我已经将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

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

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

为了让JVM知道如何加载dll,必须使用磁盘上dll的路径更新java.library.path变量。

在Eclipse中,您可以通过修改eclipse安装的根文件夹中的eclipse.ini文件来执行此操作,也可以在“ Arguments”选项卡->“ VM arguments”中针对每个运行配置执行此操作。

这是需要添加的行:

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

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

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

但是,您需要注意以下事实:您的dll也可能具有依赖关系,并且它们由操作系统解决。 本质上,在系统PATH变量中也包含dll的路径将是一个好主意。

更新

在eclipse.ini中,需要在-vmargs行之后添加此属性:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM