コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Macで任意の引数で実行可能なEclipseを「.app」で作ってみた。ゆっくりしていってね。

任意の引数で実行可能になっていなかった!! 検証し直しているので、以下は参考にしないでください。

前置き

WindowsではEclipseの実行ファイルのショートカットに、起動オプションを指定することでEclipse起動時のオプションをショートカットごとに作ることができます。そこで、1つのEclipseの実行ファイルから複数のショートカットを作成し、規定のワークスペースを設定して起動するということをよくやっています。

Macだとシェルスクリプトを書いて起動させればいいのですが、Dockから起動したいのでいろいろ調べてみました。参考にしたのは以下のサイトです。

ディレクトリ構造と設定ファイル

ディレクトリ構造

Macのアプリケーションを作成するために、今回は「.app」を手作業で作成してみました。最初に必要なディレクトリを作成します。Macにもtreeコマンドがあるようなのでtreeコマンドも一緒に入れてみました。

$ sudo port install tree

treeコマンドで「.app」ディレクトリの階層構造を表示してみます。

$ tree eclipse3.7-w3.7-web.app/
eclipse3.7-w3.7-web.app/
└── Contents
    ├── Info.plist
    ├── MacOS
    │└── script.sh
    └── Resources
        └── icon.icns

この中でディレクトリをのぞき、ファイルとして作成する必要があるものはInfo.plistと、Eclipseを起動するscript.sh、あとはアプリケーションのアイコンのicon.icnsです。

Info.plist

Info.plistは以下のように作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
  <key>CFBundleExecutable</key>
  <string>script.sh</string>
  <key>CFBundleIconFile</key>
  <string>icon.icns</string>
  <key>CFBundlePackageType</key>
  <string>APPL</string>
  <key>CFBundleSignature</key>
  <string>????</string>
 </dict>
</plist>

Info.plistの以下の部分でアプリケーション起動時に実行するシェルスクリプトのファイル名をを記述します。そのファイルは、MacOSディレクトリ以下に作成します。シェルスクリプトは実行可能なものであれば何でも大丈夫だと思います。今回使用したものは後述します。

  <key>CFBundleExecutable</key>
  <string>script.sh</string>

アプリケーションのアイコンのファイルは、以下の部分で指定しています。Resourcesディレクトリ以下に作成します。今回は上記のサイトでも紹介されています、「Img2icns」を使ってアイコンを作成しました。

  <key>CFBundleIconFile</key>
  <string>icon.icns</string>

Eclipse起動用のシェルスクリプト

今回はここがちみっと苦労しました。Windowsの場合には、起動オプションで-dataを指定すれば大体動いていたのですがMacの場合には少し記述を足さないと、思ったようには動きませんでした。

具体的にはいろいろあったのですが、最終的に書いたのは以下のスクリプトです。

#!/bin/sh

/Applications/eclipse3.7/eclipse -vm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java -data $HOME/Documents/eclipse/w3.7-web -vmargs -XX:MaxPermSize=256m -Xms256m -Xmx1024m -Dfile.encoding=UTF-8 -Xdock:icon=../Resources/icon.icns -Dorg.eclipse.swt.internal.carbon.smallFonts > /dev/null 2>&1

改行を入れないとわかりにくいので、以下分解したものです。基本的にはeclipse.iniの設定で必要そうなものをピックアップして拾ってきています。

パラメータ 説明
これ動いてないので確認中-vm /System/Library/Frameworks/JavaVM.framework/
Versions/CurrentJDK/Home/bin/java
起動時に使用するJava VMを指定します。普通はJavaのパスが通っていれば問題ないのですが、JAVA_HOMEを変更したくないとか言われてくないので(誰に?)明示しています。いらないならとっても多分動くと思います。
-data $HOME/Documents/eclipse/w3.7-web 肝心要のワークスペースの場所です。$HOMEとかにしておくと、誰の環境でも動きそうな感じがします。ここを変えたものを複数用意したいというのが今回の本当の目的です。
-vmargs
-XX:MaxPermSize=256m
-Xms256m
-Xmx1024m
Javaに渡すパラメータです。メモリはじゃばじゃばあるので適当に割り振りましょう。
-Dfile.encoding=UTF-8 Macに限らずJavaのコードはUTF-8で書くのがいいと思います。ですので、デフォルトをUTF-8にしておくと無用なトラブルが多少減ると思います。
-Xdock:icon=../Resources/icon.icns ちゃんと調べていないのですが、多分Dockに表示する際のアイコンです。指定しないと、起動時にEclipseのアイコンにジョブチェンジします。普通はそれでも問題ないので、変えなくてもいいです。
-Dorg.eclipse.swt.internal.carbon.smallFonts これを指定しないと、普通より大きめのフォントで表示されます。

という感じでできたのが以下のアイコンです。どうしてこうなった。

感想

アプリケーションの設定やファイルを「.app」にまとめてあるというのはすごく面白い設計だなあと感じました。アプリケーション自体が1つの大きなファイルのように見えていながら、実態はディレクトリツリーになっているのはユーザーに優しく、アプリケーション作成者にも優しい感じがします。実際こんなに簡単にできるとは思っていませんでした。

ちなみに、霊夢のアイコンは以下のものを使わせていただきました。ゆっくりしていってね
http://commons.nicovideo.jp/material/nc23691