如何创建AppleScript或Command文件以在Mac OS上启动Java应用程序?

时间:2012-03-11 14:35:40

标签: java macos shell applescript noclassdeffounderror

我创建了一个Java应用程序,需要准备它在任何操作系统上运行。对于Windows,我创建了一个像launch-win32.bat这样的批处理文件:

@echo off
javaw -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*;bin/myjar-latest.jar my.package.MyMainClass

对于linux,我创建了一个像这样的launch-linux.sh

的shell脚本
#!/bin/sh
java -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*:bin/myjar-latest.jar my.package.MyMainClass

现在我认为MacOS与linux非常相似,因为它们都是基于unix的,我问一个有mac的朋友尝试运行shellscript来启动我的应用程序。但它失败了以下NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: my/package/MyMainClass
Caused by: java.lang.ClassNotFoundException: my.package.MyMainClass
    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)

看起来java命令的语法不正确,因为类路径未正确添加到java程序中。我现在的主要问题如下:

  1. Sun / Oracle没有正式支持MacOS,这就是为什么很难找到一些好的文档。 (我需要最新的JRE 7)。
  2. 我从来没有使用过任何Mac,也没有尝试过如何使用它。
  3. 所以现在我的问题是:

    1. 如何在MacOS中从命令行运行java,正确的语法是什么?或者为什么上面的命令不起作用? (例如,Windows和Linux之间的主要区别是对类路径使用分号;而不是冒号:分隔符。)
    2. 应该如何命名MacOS脚本文件? .sh.scpt.command或者在linux中,只要您chmod +x脚本文件,文件结尾无关紧要?
    3. 感谢任何提示。

1 个答案:

答案 0 :(得分:10)

好的,经过几个小时的研究,这个问题似乎不止一个答案。

Bash脚本

多个问题

摘要

Windows:launch-win32.bat

@echo off
javaw -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*;bin/myjar-latest.jar my.package.MyMainClass

Linux:launch-linux.sh

#!/bin/sh
java -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*:bin/myjar-latest.jar my.package.MyMainClass

Mac OS:launch-macos.command

#!/bin/bash
cd "$(dirname "$0")"
java -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*:bin/myjar-latest.jar my.package.MyMainClass