java.library.path 中没有 mssql-jdbc_auth-8.4.0.x64 |替代手动将其复制到 java home / bin
no mssql-jdbc_auth-8.4.0.x64 in java.library.path | Alternate to copying it manually to java home / bin
我正在尝试开发一个使用 "mssql-jdbc_auth-8.4.0.x64.dll"
的命令行实用程序
为了构建实用程序,我使用了 maven 插件 -
<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 安装”时,您会得到一个 Target/appassembler/bankLoanCommandLineUtility.sh 文件,您可以 运行 使用 powershell 或 cmd 提示符。
现在的问题是,在 target/bin 中,我正在生成 "mssql-jdbc_auth-8.4.0.x64.dll" 像这样使用 maven.. .
<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 Server0\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 Server0\DTS\Binn\, C:\Program Files\Microsoft SQL Server0\DTS\Binn\, C:\Program Files\Microsoft SQL Server\Client SDK\ODBC0\Tools\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\, C:\Program Files\Microsoft SQL Server0\Tools\Binn\, C:\Program Files\Azure Data Studio\bin, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Windows Kits\Windows Performance Toolkit\, T:\BuildTools\Java\jdk-11.0.2, C:\Program Files\nodejs\, C:\ProgramData\chocolatey\bin, C:\Program Files\PowerShell\, 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 home path/bin 等)。
我可以手动将 DLL 放到路径中,一切都很好,但我不能也不应该。
现在我可以提供另一种解决方法
<outputDirectory>${java.home}/bin</outputDirectory>
而不是
<outputDirectory>${project.build.directory}/bin</outputDirectory>
这会将 DLL 带到 java。home/bin 在我安装 maven 之后一切正常 但是 我不能这样做,因为我有仅将目标文件夹共享给其他团队,他们将 运行 该工具(他们不能执行“maven 安装”以将该 DLL 移动到 java home/bin 文件夹)
有什么方法可以使用 POM 加载 DLL 或当 DLL 在目标中时从 main() 加载 DLL。或者任何其他方法?请告诉我。
${project.build.directory}/bin 将此更改为
${project.build.directory}/appassembler/bin
将 .sh 和 dll 放在同一个文件夹中,它会工作得很好。 ;)
我正在尝试开发一个使用 "mssql-jdbc_auth-8.4.0.x64.dll"
的命令行实用程序为了构建实用程序,我使用了 maven 插件 -
<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 安装”时,您会得到一个 Target/appassembler/bankLoanCommandLineUtility.sh 文件,您可以 运行 使用 powershell 或 cmd 提示符。
现在的问题是,在 target/bin 中,我正在生成 "mssql-jdbc_auth-8.4.0.x64.dll" 像这样使用 maven.. .
<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 Server0\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 Server0\DTS\Binn\, C:\Program Files\Microsoft SQL Server0\DTS\Binn\, C:\Program Files\Microsoft SQL Server\Client SDK\ODBC0\Tools\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\, C:\Program Files\Microsoft SQL Server0\Tools\Binn\, C:\Program Files\Azure Data Studio\bin, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\, C:\Program Files (x86)\Windows Kits\Windows Performance Toolkit\, T:\BuildTools\Java\jdk-11.0.2, C:\Program Files\nodejs\, C:\ProgramData\chocolatey\bin, C:\Program Files\PowerShell\, 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 home path/bin 等)。
我可以手动将 DLL 放到路径中,一切都很好,但我不能也不应该。
现在我可以提供另一种解决方法
<outputDirectory>${java.home}/bin</outputDirectory>
而不是
<outputDirectory>${project.build.directory}/bin</outputDirectory>
这会将 DLL 带到 java。home/bin 在我安装 maven 之后一切正常 但是 我不能这样做,因为我有仅将目标文件夹共享给其他团队,他们将 运行 该工具(他们不能执行“maven 安装”以将该 DLL 移动到 java home/bin 文件夹)
有什么方法可以使用 POM 加载 DLL 或当 DLL 在目标中时从 main() 加载 DLL。或者任何其他方法?请告诉我。
${project.build.directory}/bin 将此更改为
${project.build.directory}/appassembler/bin
将 .sh 和 dll 放在同一个文件夹中,它会工作得很好。 ;)