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 放在同一个文件夹中,它会工作得很好。 ;)