我目前正在使用Sikuli,它要求设置PATH
和SIKULI_PATH
环境变量才能执行。在运行配置中应用它非常简单,允许我从Eclipse中按预期运行脚本。
导出可运行的JAR非常适用于除UnsatisfiedLinkError
之外的所有内容,这与我没有设置上述变量时会收到的异常相同。
有没有方便的方法将以下设置导出到可运行的JAR中?:
这个想法主要是生成一个执行Sikuli脚本的独立可执行JAR。
我尝试手动设置PATH
和SIKULI_HOME
按预期工作(echo %PATH%
& echo %SIKULI_HOME%
同时打印所需的路径)。但是,我仍然收到相同的UnsatisfiedLinkError
。以下是相关的StackTrace:
C:\Users\XXXXX\Desktop>java -jar sikuli.jar -Dsikuli.Debug=3 -Djava.library.path = "C:\Program Files (x86)\Sikuli X\"
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\Sikuli X\libs\Win32Util.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at com.wapmx.nativeutils.jniloader.NativeLoader.loadLibrary(NativeLoader.java:44)
at org.sikuli.script.Win32Util.<clinit>(Win32Util.java:19)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.sikuli.script.Env.getOSUtil(Env.java:91)
at org.sikuli.script.ScreenHighlighter.init(ScreenHighlighter.java:180)
at org.sikuli.script.ScreenHighlighter.<init>(ScreenHighlighter.java:293)
at org.sikuli.script.Screen.initBounds(Screen.java:105)
at org.sikuli.script.Screen.<init>(Screen.java:117)
at org.sikuli.tests.TestSikuli.main(TestSikuli.java:13)
答案 0 :(得分:2)
我不认为有开箱即用的方式,因为这是特定于操作系统的。如果您使用的是Windows,只需创建一个包含
行的批处理文件 set PATH=%PATH%;...
set SIKULI_HOME=...
%JAVA_HOME%\bin\java yourrunnable.jar
答案 1 :(得分:0)
添加环境变量是不够的。我必须以管理员身份登录并设置系统变量并在libs
中附加Sikuli PATH
路径并创建SIKULI_HOME
路径,其中包含SikuliX
的基本路径。
之后我读到不建议在Program Files(x86)
内维护Sikuli文件,而是将它们移到C:\Users\my_user\SikuliX
。
此外,Sikuli-Java.jar
不会保留在项目工作区内(并在内部引用),而是保留在项目之外(实际上是SikuliX路径),并且应始终保留在那里。
如果您修改了有关SikuliX的任何文件夹,请务必删除冗余副本,以避免将来的更新发生冲突问题。
其中一些信息可能是多余的,例如从Program Files
到User
文件夹的移动,但这解决了我的问题。
注意 - 如果对系统变量进行了任何修改,请务必至少注销并重新登录,以便它们生效。