Как создать файл AppleScript или Command-файл для запуска приложения Java в Mac OS? - PullRequest
8 голосов
/ 11 марта 2012

Я создал приложение 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:

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

Теперь я думал, что MacOSочень похоже на linux, поскольку оба они основаны на Unix, и я попросил друга с Mac попытаться запустить скрипт для запуска моего приложения.Но произошел сбой со следующим 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. MacOS официально не поддерживается Sun / Oracle, поэтому трудно найти хорошую документацию.(Мне нужна последняя версия JRE 7).
  2. Я никогда не использовал Mac или у меня нет возможности попробовать, как он может работать.

Итак, мои вопросы сейчас:

  1. Как запустить Java из командной строки в MacOS, каков правильный синтаксис?Или почему команда выше не работает?(Например, основное различие между Windows и Linux заключается в использовании точки с запятой ; вместо разделителя двоеточия : для пути к классам.)
  2. Как должен называться файл сценария MacOS?.sh или .scpt или .command или в linux конец файла не имеет значения, если вы chmod +x файл сценария?

Спасибо за любые подсказки.

1 Ответ

10 голосов
/ 12 марта 2012

Хорошо, после нескольких часов исследований кажется, что есть несколько ответов на этот вопрос (ы).

Bash-скрипты

Множественные проблемы

  • Одной из причин NoClassDefFoundError может быть то, что установленная по умолчанию Java VM наMac OS ниже , чем необходимый JRE / JDK, который использовался при компиляции программного обеспечения.Ничего больше я не могу с этим поделать, как просто сказать пользователю установить последнюю версию JRE.
  • Еще одна причина для NoClassDefFoundError заключается в том, что это просто шокирует, , когда скрипты bash в Mac OS неЗапускается из того же каталога, в котором они находятся в , но из домашнего каталога пользователя.Решение заключается в добавлении строки в сценарий 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
...