0

我对 Apple 脚本非常陌生,所以请多多包涵。我需要使用 运行一个.jar文件applescript,它jar是不可执行的,所以我调用了classlike com.path.to.myClass。我的 Apple 脚本如下所示 -

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

applescript 和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错了吗?如果是这样,正确的方法是什么?另外,我怎样才能添加更多jar的 s classpath

当我从中运行以下命令时,Terminal它运行得很好。

$ java -classpath ./ImageRename_JAVA-1.0.0.jar:. com.mff.image.rename.Main

我知道它可以用更好的方式完成,JAR Bundler但我无法控制JAR它由其他人开发。有没有办法可以JAR在目录下的应用程序中包含所有 sYourApplicationName.app/Contents/MacOS/Resources/Java/并在类路径中使用它们。

4

1 回答 1

2

我认为您不能保证 a 中的工作目录是什么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 字符串文字中时需要进行反斜杠转义,因此\\*.

于 2012-08-28T16:02:38.263 回答