Чтобы запустить архив Java8-JAR на компьютерах Mac с более высокой версией Java, я упаковываю jar в пакет APP (stuff.app) вместе с bash -скриптом,
, назовем его stuff. sh (edit: удален аргумент "-cp", вставлены повторяющиеся аргументы командной строки):
#!/bin/bash
VM_ARGS_A="--add-modules=java.xml.bind"
# Set the working directory
DIR=$(cd "$(dirname "$0")"; pwd)
APP_JAR="some-java-stuff.jar"
APP_NAME="Some Java Stuff"
APP_ICNS="stuff.icns"
#test: set command line args
STUFF_TITLE="Launching $APP_NAME"
STUFF_ARGS="$1"
ARGS_MSG="command line args: $STUFF_ARGS"
osascript \
-e "set question to display dialog \"$ARGS_MSG\" with title \"$STUFF_TITLE\" buttons {\"Cancel\"} default button 1"
#end test
exec $_java $VM_ARGS_A -Dapple.laf.useScreenMenuBar=true -Dcom.apple.macos.use-file-dialog-packages=true -Xdock:name="$APP_NAME" -Xdock:icon="$DIR/../Resources/$APP_ICNS" -jar "$DIR/$APP_JAR"
Фрагмент из моего Info.plist:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>skktx</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>stuff.icns</string>
<key>CFBundleTypeName</key>
<string>Java Stuff calculation</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>stuff.sh</string>
Работает нормально , в принципе.
Что не работает: открытие файлов с помощью этого приложения. Я хотел бы сделать это сделать банку для открытия файлов. Само приложение Java может открыть файл (пользовательский XML тип файла), который назван в качестве аргумента командной строки.
Когда я "щелкаю правой кнопкой мыши" (Ctrl-click) на файле этого типа и выберите открыть с помощью (мое приложение), имя файла не передается в командной строке. Вызванный диалог отображает только «аргументы командной строки:», когда я говорю Finder открыть файл с stuff.app.
Я прочитал в этом вопросе , что это можно сделать с помощью AppleScript, в котором есть раздел «открыть файлы». Или с Automator.
Итак, я попытался написать фрагмент кода AppleScript, который собирает переданные объекты и передает их в сценарий bash
property theApplicationPath : the path to me as text
property theShellScriptPath : theApplicationPath & "Contents:MacOS:stuff.sh"
set arguments to ""
on open theFiles
repeat with anItem in theFiles
set arguments to arguments & space & (quoted form of POSIX path of anItem)
end repeat
end open
do shell script theShellScriptPath & arguments
Я сохранил его в ScriptEditor как материал .scpt и применил изменения к моему Info.plist.
В результате я получаю сообщение об ошибке при попытке открыть пакет, примерно переведенный: «Вы не можете открыть приложение« stuff.app », потому что этот Ma c -Type не поддержать это ". Значок приложения отображается зачеркнутым.
Вкл. apple.stackexchange Я читал, что в LaunchAgent.plist вы можете вставить ключ в список. Это также возможно в Info.plist пакета приложения? И можно ли так же передать путь к файлу?
Спасибо!