我对苹果脚本很陌生,所以请耐心等待。我需要使用 applescript
运行一个 .jar
文件,jar
不可执行,所以我像com.path.to.myClass
一样调用class
。我的苹果脚本如下所示-
display alert "You are about to start the image rename process." buttons {"OK", "Cancel"}
set theAnswer to button returned of the result
if theAnswer is "OK" then
do shell script "java -classpath ./ImageRename_JAVA-1.0.0.jar:. com.mff.image.rename.Main"
else
say "Exit"
end if
苹果脚本和ImageRename_JAVA-1.0.0.jar
都在同一个目录中,但是当我运行脚本时,它给了我一个错误-
error "Exception in thread "main" java.lang.NoClassDefFoundError: com/mff/image/rename/Main
Caused by: java.lang.ClassNotFoundException: com.mff.image.rename.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)" number 1
我设置classpath
错误吗?如果是这样,正确的方法是什么?另外,如何向classpath
添加更多jar
?
当我从Terminal
运行以下命令时,它运行良好。
$ java -classpath ./ImageRename_JAVA-1.0.0.jar:. com.mff.image.rename.Main
我知道使用JAR Bundler
可以以更好的方式完成它,但我无法控制JAR
及其由其他人开发的。有没有办法我可以将所有JAR
包含在YourApplicationName.app/Contents/MacOS/Resources/Java/
目录中的应用程序内,并在类路径中使用它们。
我认为你不能保证do shell script
的工作目录是什么,但你可以用这样的东西来解决它:
set scriptPath to the POSIX path of (path to me)
do shell script "SCRIPTDIR=`dirname " & scriptPath & "` ; " ¬
& "java -classpath $SCRIPTDIR/ImageRename_JAVA-1.0.0.jar:$SCRIPTDIR com.mff.image.rename.Main"
要向类路径添加额外的 JAR,可以利用 java
命令提供的快捷方式,即以 *
结尾的类路径条目包含给定目录中的所有.jar
文件。
do shell script "java -classpath " ¬
& "/Applications/Something.app/Contents/Resources/Java/\* com.example.MyClass"
*
需要反斜杠转义以保护它免受 shell 的扩展,而反斜杠本身在 AppleScript 字符串文本中时需要反斜杠转义,因此\*
.