OSDN Git Service

2f986e9b4cf99ee6231337a52fdd539237bb5a20
[charactermanaj/CharacterManaJ.git] / src / main / attachment / bundle / CharacterManaJ.app / Contents / MacOS / java_launch.sh
1 #! /bin/bash
2
3 APPNAME="CharacterManaJ"
4 JARNAME="CharacterManaJ.jar"
5
6 # JVMオプション
7 declare -a jvm_options=()
8
9 # 相対パスから絶対パスに変換する
10 function realpath() {
11     [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
12 }
13
14 # エラーを表示する
15 function ShowMessage() {
16     if [[ -x /usr/bin/osascript ]]; then
17         /usr/bin/osascript -e "display alert \"$APPNAME\" message \"$1\""
18     else
19         echo "$APPNAME -- $1"
20     fi
21 }
22
23 # JVMに指定するオプションのテキストファイルをjvm_options配列に読み込む
24 function read_jvm_options() {
25     while IFS='' read -r line || [[ -n $line ]]; do
26         line="${line//[$'\r\n']}" # 行端記号の除去(空白は残す)
27         trimline="${line//[$'\t\r\n ']}" # 空行判定のためタブ、行端、空白を除去
28         if [[ -n $trimline ]]; then
29             jvm_options+=("$line")
30         fi
31     done < "$1"
32 }
33
34 # このスクリプト基準のパスを求める
35 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
36 RESOURCE_DIR="$(realpath "$SCRIPT_DIR/../Resources")"
37
38 # JVMオプションがあれば読み取る
39 if [[ -f "$RESOURCE_DIR/jvm_options" ]]; then
40     read_jvm_options "$RESOURCE_DIR/jvm_options"
41 fi
42 # JVMオプション(ユーザーディレクトリ上)
43 if [[ -f "${HOME}/Library/${APPNAME}/jvm_options" ]]; then
44     read_jvm_options "${HOME}/Library/${APPNAME}/jvm_options"
45 fi
46
47 # JREの位置を検索する
48 PLUGINS_JRE_DIR="$(realpath "${SCRIPT_DIR}/../Plugins/JRE")"
49 if [[ -x "${PLUGINS_JRE_DIR}/Home/bin/java" ]]; then
50     # バンドル内にある場合(パターン1)
51     JAVA_HOME="$(realpath "${PLUGINS_JRE_DIR}/Home")"
52 elif [[ -x "${PLUGINS_JRE_DIR}/bin/java" ]]; then
53     # バンドル内にある場合(パターン2)
54     JAVA_HOME="$(realpath "${PLUGINS_JRE_DIR}")"
55 else
56     # バンドル内にない場合で、環境変数JAVA_HOMEがあれば、それを用いる。
57     # 環境変数JAVA_HOMEがなければ、/usr/libexec/java_home があれば、それを使う
58     if [[ -z "$JAVA_HOME" ]]; then
59         if [[ -x "/usr/libexec/java_home" ]]; then
60             JAVA_HOME="$(/usr/libexec/java_home)"
61         fi
62     fi
63 fi
64
65 if [[ -z "$JAVA_HOME" ]]; then
66     which java 2>/dev/null
67     if [[ $? -ne 0 ]]; then
68         # JAVA_HOMEが設定されておらず、且つ、javaにパスが通ってない場合はエラー
69         ShowMessage "Could not find Java SE Runtime Environment."
70         exit 2
71     fi
72     # JAVA_HOMEは未設定だがパスが通っていれば継続する
73     JAVA_CMD="java"
74 else
75     # JAVA_HOMEが特定されている場合は、それを用いる
76     export JAVA_HOME
77     JAVA_CMD="$JAVA_HOME/bin/java"
78 fi
79
80 # JAVAをオプションとJARを指定して起動する
81 if [[ -f $RESOURCE_DIR/$JARNAME ]]; then
82     "$JAVA_CMD" ${jvm_options[@]} -jar "$RESOURCE_DIR/$JARNAME" || ShowMessage "Failed to launch ${APPNAME}"
83 else
84     ShowMessage "$JARNAME is not found."
85 fi