Я создал приложение 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. Моя основная проблема сейчас заключается в следующем:
Теперь мои вопросы:
;
вместо разделителя двоеточия :
для пути к классам.).sh
или .scpt
или .command
или это похоже на Linux, что окончание файла не имеет значения, пока вы chmod +x
файл скрипта?Спасибо за любые подсказки.