我有一个Java应用程序,它分发给少数用户。应用程序使用Windows身份验证连接到SQLServer数据库。 从几个SO-Posts(SO6938717,SO17277001)我了解到,通常的做法是在VM参数中设置所需库的路径。
java -Djava.library.path = / path / to / my / dll -jar / my / classpath / goes / here MainClass
我的应用程序在32位和64位环境中运行,但是对于每个环境,都有一个具有相同名称的特定库:sqljdbc_auth.dll。
我可以设置两个路径作为VM参数: java -Djava.library.path = / auth / x86; / auth / x64 -jar / my / classpath / goes / here MainClass
但这不起作用。我怎样才能确保Windows身份验证在32位和64位环境中工作?
答案 0 :(得分:1)
看看这里:
possible-values-of-processor-architecture
考虑到这一点,您可以通过以下方式分发您的应用:
/libs/yourjarfiles.jar
/AMD64/sqljdbc_auth.dll (the 64bit version)
/x86/sqljdbc_auth.dll (the 32 bit version)
并使用
调用它java -Djava.library.path=.\%PROCESSOR_ARCHITECTURE%\ -jar /my/classpath/goes/here MainClass
安装的绝对路径在库路径设置中可能是一个好主意。
编辑:解决64位主机上32位Java的上述问题
Helper-Class:Architecture.java
public class Architecture {
public static void main(String[] args) {
System.out.print(System.getProperty("os.arch"));
}
}
CMD启动您的计划
@ECHO OFF
for /f %%i in ('java -classpath /my/classpath/goes/here/ Architecture') do set JAVA_ARCH=%%i
java -Djava.library.path=path/to/dlls/%JAVA_ARCH%/ -cp /my/classpath/goes/here MainClass
您必须像这样命名您的目录以匹配可能的os.arch值:
/x86 - 32 bit DLL goes here
/amd64 - 64 bit DLL goes here
我想如果您知道库的路径,您甚至可以在os.arch
的运行时基于MainClass
系统属性附加该路径。