java - java.library.path 中没有 mssql-jdbc_auth-8.4.0.x64 | 替代手动将其复制到 java home / bin
问题描述
我正在尝试开发一个使用“mssql-jdbc_auth-8.4.0.x64.dll”的命令行实用程序
要构建实用程序,我使用的是 maven-plugin -
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>2.1.0</version>
<executions>
<execution>
<id>generate-shell-scripts</id>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
<configuration>
<binFileExtensions>
<unix>.sh</unix>
</binFileExtensions>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<repositoryLayout>flat</repositoryLayout>
<useWildcardClassPath>true</useWildcardClassPath>
<programs>
<program>
<mainClass>com.demo.Console</mainClass>
<id>bankLoanCommandLineUtility</id>
</program>
</programs>
</configuration>
</execution>
</executions>
</plugin>
因此,当您执行“maven install”时,您会得到一个 Target/appassembler/bankLoanCommandLineUtility.sh 文件,您可以使用 powershell 或 cmd 提示符运行该文件。
现在的问题是,在目标/bin中,我正在使用这样的maven生成“mssql-jdbc_auth-8.4.0.x64.dll” ......
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc_auth</artifactId>
<version>8.4.0.x64</version>
<type>dll</type>
<outputDirectory>${project.build.directory}/bin</outputDirectory>
<destFileName>mssql-jdbc_auth-8.4.0.x64.dll</destFileName>
</artifactItem>
</artifactItems>
</configuration>
这是在 Target/Bin 文件夹中下载 DLL 的副本。
现在的问题是,当我执行我的命令行实用程序(.SH 文件)时,我遇到了错误。
Caused by: java.lang.UnsatisfiedLinkError: no mssql-jdbc_auth-8.4.0.x64 in java.library.path: [T:\BuildTools\Java\jdk-11.0.2\bin, C:\WINDOWS\Sun\Java\bin, C:\WINDOWS\system32, C:\WINDOWS, C:\Program Files (x86)\Microsoft SDKs\Azdata\CLI\wbin, T:\BuildTools\Java\jdk-11.0.2\bin, C:\Program Files\Microsoft MPI\Bin\, C:\WINDOWS\System32\WindowsPowerShell\v1.0\, C:\WINDOWS\system32, C:\WINDOWS, C:\WINDOWS\System32\Wbem, C:\WINDOWS\System32\OpenSSH\, C:\Program Files\Perforce, C:\Program Files\Perforce\, C:\Program Files\dotnet\, C:\Program Files\Microsoft SQL Server\130\Tools\Binn\, T:\BuildTools\Apache\apache-ant-1.10.9\bin, C:\Program Files\apache-maven-3.6.3, C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\, C:\Program Files\Microsoft SQL Server\150\DTS\Binn\, C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\, C:\Program Files (x86)\Microsoft SQL Server\150\Tools\Binn\, C:\Program Files\Microsoft SQL Server\150\Tools\Binn\, C:\Program Files\Azure Data Studio\bin, C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\, C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\, T:\BuildTools\Java\jdk-11.0.2, C:\Program Files\nodejs\, C:\ProgramData\chocolatey\bin, C:\Program Files\PowerShell\7\, C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps, C:\Program Files\Perforce\Server, C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\bin, C:\Users\Administrator\.dotnet\tools, C:\Users\Administrator\AppData\Roaming\npm, .]
从错误消息中可以清楚地看出,该工具没有从 Target/Bin 加载 DLL,而是在系统中寻找 DLL 的路径(例如,Java 主路径/bin 等)。
我可以手动将 DLL 放置到路径中,一切都很好而且花花公子,但我不能也不应该。
现在还有一种解决方法,我可以给
<outputDirectory>${java.home}/bin</outputDirectory>
而不是
<outputDirectory>${project.build.directory}/bin</outputDirectory>
这将在我安装 maven 后将 DLL 带到 java.home/bin 并且一切正常但我不能这样做,因为我必须只与其他团队共享目标文件夹,他们将运行该工具(他们不能这样做“ maven install”,以便将该 DLL 移动到 java home/bin 文件夹)
当 DLL 在目标内部时,有没有办法可以使用 POM 加载 DLL 或从 main() 加载 DLL。还是有其他方法?请告诉我。
解决方案
${project.build.directory}/bin 将其更改为
${project.build.directory}/appassembler/bin
将 .sh 和 dll 保存在同一个文件夹中,它会正常工作。;)
推荐阅读
- c# - 查找用户网络的网关
- ios - 在 Objective-C 中分配 UIColor 标准颜色
- performance - 如何在 Visual Studio 2017 C++ 项目中启用应用程序时间线?
- javascript - 如何遍历 Javascript 中的嵌套对象?
- postgresql - 如何在 Openshift 3 上使用端口转发数据库 Postgrsql 进行连接
- python - 根据主要颜色激活/停用像素
- c# - .NET Core 端点 + 全局 CORS
- java - 由于 HttpExchange 要求 sendResponseHeaders(int,long) 必须在 getResponseBody() 之前,我该如何处理传输文件?
- c# - oracle选择计数查询在c#中不起作用
- amazon-dynamodb - 如何将 5000 条记录写入 DynamoDB 表?