首页 > 解决方案 > 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。还是有其他方法?请告诉我。

标签: javasql-servermavenmaven-pluginmaven-assembly-plugin

解决方案


${project.build.directory}/bin 将其更改为

${project.build.directory}/appassembler/bin

将 .sh 和 dll 保存在同一个文件夹中,它会正常工作。;)


推荐阅读