OSDN Git Service

Macでの起動をBashにする実験
authorseraphy <seraphy@users.osdn.me>
Sun, 18 Nov 2018 16:33:51 +0000 (01:33 +0900)
committerseraphy <seraphy@users.osdn.me>
Sun, 18 Nov 2018 16:33:51 +0000 (01:33 +0900)
src/main/attachment/bundle/CharacterManaJ.app/Contents/MacOS/java_launch.sh [new file with mode: 0755]

diff --git a/src/main/attachment/bundle/CharacterManaJ.app/Contents/MacOS/java_launch.sh b/src/main/attachment/bundle/CharacterManaJ.app/Contents/MacOS/java_launch.sh
new file mode 100755 (executable)
index 0000000..59e52d1
--- /dev/null
@@ -0,0 +1,85 @@
+#! /bin/bash
+
+APPNAME="CharacterManaJ"
+JARNAME="CharacterManaJ-0.9.9.9.jar"
+
+# JVMオプション
+declare -a jvm_options=()
+
+# 相対パスから絶対パスに変換する
+realpath() {
+    [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
+}
+
+# エラーを表示する
+function ShowMessage() {
+    if [[ -x /usr/bin/osascript ]]; then
+        /usr/bin/osascript -e "display alert \"$APPNAME\" message \"$1\""
+    else
+        echo "$APPNAME -- $1"
+    fi
+}
+
+# JVMに指定するオプションのテキストファイルをjvm_options配列に読み込む
+function read_jvm_options() {
+    while IFS='' read -r line || [[ -n $line ]]; do
+        line="${line//[$'\r\n']}" # 行端記号の除去(空白は残す)
+        trimline="${line//[$'\t\r\n ']}" # 空行判定のためタブ、行端、空白を除去
+        if [[ -n $trimline ]]; then
+            jvm_options+=("$line")
+        fi
+    done < "$1"
+}
+
+# このスクリプト基準のパスを求める
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
+RESOURCE_DIR="$(realpath "$SCRIPT_DIR/../Resources")"
+
+# JVMオプションがあれば読み取る
+if [[ -f $RESOURCE_DIR/jvm_options ]]; then
+    read_jvm_options $RESOURCE_DIR/options
+fi
+# JVMオプション(ユーザーディレクトリ上)
+if [[ -f ~/Library/${APPNAME}/jvm_options ]]; then
+    read_jvm_options ~/Library/${APPNAME}/jvm_options
+fi
+
+# JREの位置を検索する
+PLUGINS_JRE_DIR="$(realpath "${SCRIPT_DIR}/../Plugins/JRE")"
+if [[ -x ${PLUGINS_JRE_DIR}/Home/bin/java ]]; then
+    # バンドル内にある場合(パターン1)
+    JAVA_HOME="$(realpath "${PLUGINS_JRE_DIR}/Home/bin")"
+elif [[ -x ${PLUGINS_JRE_DIR}/bin/java ]]; then
+    # バンドル内にある場合(パターン2)
+    JAVA_HOME="$(realpath "${PLUGINS_JRE_DIR}/bin")"
+else
+    # バンドル内にない場合で、環境変数JAVA_HOMEがあれば、それを用いる。
+    # 環境変数JAVA_HOMEがなければ、/usr/libexec/java_home があれば、それを使う
+    if [[ -z $JAVA_HOME ]]; then
+        if [[ -x /usr/libexec/java_home ]]; then
+            JAVA_HOME="$(/usr/libexec/java_home)"
+        fi
+    fi
+fi
+
+if [[ -z $JAVA_HOME ]]; then
+    which java 2>/dev/null
+    if [[ $? -ne 0 ]]; then
+        # JAVA_HOMEが設定されておらず、且つ、javaにパスが通ってない場合はエラー
+        ShowMessage "Could not find Java SE Runtime Environment."
+        exit 2
+    fi
+    # JAVA_HOMEは未設定だがパスが通っていれば継続する
+    JAVA_CMD="java"
+else
+    # JAVA_HOMEが特定されている場合は、それを用いる
+    export JAVA_HOME
+    JAVA_CMD="$JAVA_HOME/bin/java"
+fi
+
+# JAVAをオプションとJARを指定して起動する
+if [[ -f $RESOURCE_DIR/$JARNAME ]]; then
+    "$JAVA_CMD" ${jvm_options[@]} -jar "$RESOURCE_DIR/$JARNAME" || ShowMessage "Failed to launch ${APPNAME}"
+else
+    ShowMessage "$JARNAME is not found."
+fi