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

我创建了一个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或没有任何尝试它如何工作。

所以现在我的问题是:

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

谢谢你的任何提示。

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

Bash脚本

  • 在Mac OS中创建脚本的最简单方法似乎是 .command bash脚本文件。 它们看起来与linux shell脚本非常相似。 使用chmod +x使它们像shell脚本一样可执行。

多个问题

  • NoClassDefFoundError一个原因可能是Mac OS上的默认安装Java VM低于编译软件所需的JRE / JDK。 除了告诉用户安装lateste JRE之外,我无能为力。
  • NoClassDefFoundError另一个原因是 – 这非常令人震惊 – Mac OS中的bash脚本不是从它们所在的目录中运行,而是从用户的主目录运行。 解决方案是在bash脚本中添加一行以找出工作目录: cd "$(dirname "$0")" ( 另请参阅 。)

概要

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 
Interesting Posts