2008/12/17

AJDTやAspectJをベースにしたツールの開発

Developer's guide to building tools on top of AJDT and AspectJ
AJDTやAspectJをベースにしたツールの開発ガイド。

EclipseプラグインからAJDTを利用する方法や、AspectJのパーザ(.ajファイルパーザ)を利用する方法が解説されてる。

Java6 on MacOS X では Eclipse は動作しない

どうせならEclipseもJava6上で動かしてやろうと、Info.plistを編集してJava6を指定し、起動するとエラーが出た。

調べてみると、MacのJava6自体は64bitで実装されているが、SWTが32bitにしか対応していないためらしい。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=239301によると、現在SWTをCarbonからCocoaに移植してる(CocoaSWT)最中で、それが終わってから、Eclipse3.5くらいで64bit対応できるといいなぁって程度らしい。

ちなみにCocoaSWTの移植が終わるのはSWT3.5のM6、March 13, 2009。
64bit版はいつになることやら。

2008/12/13

LeopardのJava6でJavaFX1.0をスクリプティングAPI(JSR223)経由で実行する

JavaFX1.0がリリースされたので、早速Macで動かしてみた。JavaFXとして起動するともちろん動くんだけど、Javaからスクリプトとして実行すると、うまくいかない。

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: com.sun.tools.javac.main.RecognizedOptions.getJavacFileManagerOptions(Lcom/sun/tools/javac/main/RecognizedOptions$OptionHelper;)[Lcom/sun/tools/javac/main/JavacOption$Option;
at com.sun.tools.javac.util.JavacFileManager.(JavacFileManager.java:973)
at com.sun.tools.javafx.api.JavafxcTool.getStandardFileManager(JavafxcTool.java:102)
at com.sun.tools.javafx.script.JavaFXScriptCompiler.compile(JavaFXScriptCompiler.java:97)
at com.sun.tools.javafx.script.JavaFXScriptEngineImpl.parse(JavaFXScriptEngineImpl.java:206)
...

javac関連のクラスが競合していてエラーが出てる。調べてみると、事情は少々複雑なようだ(後述)。解決策としては、プログラムを実行するJava6に、javafxc.jarを優先的にロードさせればいい。

Eclipseで実行する場合、Installed JREsからJVMの実行環境を編集し、/System/Library/Frameworks/JavaFX.framework/Versions/1.0/lib/shared/javafxc.jarを追加して先頭に持ってくる。

コマンドラインからは試してないけど、おそらくbootclasspathオプションが使えるはず。


何故そんなことになるかだけど、これは2つの事情が関係している。

Mac側の事情は、Javaのclasses.jarに、Windowsで言うところのtools.jarの内容が含まれていること。何故こうなってるかはわからないんだけど、調べてみるとこれでが原因で、いろんなソフトウェアではまっている人が結構居るようだ(といってもtools.jar前提のソフト自体限られるけど)。

JavaFX側の事情は、スクリプトのコンパイラであるjavafxc.jarに、こちらもtools.jarの内容が含まれていること。これは、JavaFXがスクリプトからバイトコードを生成するものなので、理解はできる。但し、その内容がJava5相当のものになっている。Java6 update10とセットかの用に語られているけど、実はMacではJDK5 Update 13(Appleの表現だとLeopardでUpdate 2相当)以降で動作するようになっている(WindowsではJDK6 Update 7以降)ためのようだ(JavaFX 1.0 SDK Requirements参照)。

それぞれ事情があり、Mac側の事情はたいしたこと無さそうだけど(tools.jarに切り出すことは簡単なはず)Appleがわざわざそうするとも思えないので、根本的な解決が計られることは無いような気がする。困ったもんだ。

2008/06/19

Ganymede(Eclipse3.4)用AJDTとSubclipse

Subclipse 1.4(Subversionは1.5らしい)
http://subclipse.tigris.org/update_1.4.x

AJDT 3.4
http://download.eclipse.org/tools/ajdt/34/dev/update

どちらもMac上のGanymede(RC4)で動いてます。SbclipseはSubversionクライアントのインストールも忘れずに。Mac上ではJavaHLは動きませんが(Windowsのみっぽい)、SVNKitは動作します。

2008/06/15

WhiteDogプロジェクト再スタート

http://code.google.com/p/whitedog/

未踏以来(対外的には)大きな進展が無かったWhiteDogですが、一から設計をやり直して再スタートさせました。
これを機にライセンスもオープン(Apache License 2.0)にしました。

とりあえずGUIは無しにして、アノテーションを中心にした開発用ライブラリを時間をかけて設計しながら作っていく予定です。

特徴として

  • アノテーションベース

  • 交換可能なプロトコル(とりあえずローカル(in-vm or in-classloader)とUDPマルチキャスト(JGroups)をサポート)


を考えてます。

2008/03/27

AJDT1.5.2とAJDT1.6.0

AJDT1.5.2(with AspectJ1.6.0m1)とAJDT1.6.0(with AspectJ1.6.0m2)が出てます。
どちらもdevelopment buildです。

AJDT1.5.2(with AspectJ1.6.0m1) for Eclipse 3.3
http://download.eclipse.org/tools/ajdt/33/dev/update
http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg08715.html

AJDT1.6.0(with AspectJ1.6.0m2) for Eclipse 3.4
http://download.eclipse.org/tools/ajdt/34/dev/update
http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg08894.html

AspectJ1.6.0m2では、Parameter Annotation Matchingも使えます! さらにアノテーションパラメータを静的にマッチングすることも可能です(クラス型と配列、パラメータアノテーションは未実装)
http://www.eclipse.org/aspectj/doc/released/README-160.html

around executionが適用されたメソッドの変数情報が欠落する - 3

過去のエントリー:
around executionが適用されたメソッドの変数情報が欠落する
around executionが適用されたメソッドの変数情報が欠落する - その後

https://bugs.eclipse.org/bugs/show_bug.cgi?id=173978
1.6.1に持ち越されました。
気付けばもう1年以上修正されてない。それだけ需要無いのかな。
まぁ僕もbefore/afterで処理できたので取り急ぎ困ってないんだけど。

2008/01/25

さらにさらに続報: Java6 on MacOS X

いつのまにかちょっと検索するとsoylatteの情報が沢山手に入るようになってますね。
その中から、個人的に試した範囲でまとめときます。


  1. SoyLatte: Java 6 Port for Mac OS X 10.4 and 10.5 (Intel)をダウンロード&ダブルクリック
  2. ターミナルで open /usr/local を実行
  3. ファインダーで1のsoylatte16-i386-1.0.1 を /usr/local にインストール


これでsoylatteのインストールは完了です。AWTやSwingを使う場合、以下の設定が必要。
ただし、僕の環境では以下の設定を行った後デスクトップにハードディスク以外のアイコンが表示されないようになり、ファインダーの左のショートカットのアイコンもおかしくなったので、他に設定が必要かも。.MacOSXを違う名前にし、再起動するとなおりました。


  1. ターミナルで mkdir ~/.MacOSX を実行
  2. ~/.MacOSXに以下の内容でenvironment.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>DISPLAY</key>
    <string>:0.0</string>
    </dict>
    </plist>

    (/Developer/Applications/Utilities/Property List Editorを使うと簡単に作れます。)
  3. 一旦ログアウトし、再ログイン
  4. X11(アプリケーション/ユーティリティ/X11)を起動


これでAWT、Swingも使えるようになります。ただしこのままだと日本語が出ないので、下記の設定を行います。


  1. ターミナルで mkdir /usr/local/soylatte16-i386-1.0.1/jre/lib/fonts/fallback を実行
  2. ターミナルで open /usr/local/soylatte16-i386-1.0.1/jre/lib/fonts/fallback を実行
  3. 一般利用者向けIPAフォントのダウンロードからフォントをダウンロードして解凍し、ipa*.ttfをfallbackにコピー


これで日本語が表示されるようになります。
X11上で表示されるLAFはGTKなので、これをOSXぽくするために、Quaquaをインストールします。


  1. Quaqua Look And Feelをダウンロード(試したのはバージョン4.2)して解凍し、/usr/local/soylatte16-i386-1.0.1/jre/lib/extにlibquaqua.jnilibとquaqua.jarをコピー

  2. LAFを選択できないアプリでも、Javaの起動オプションに -Dswing.defaultlaf=ch.randelshofer.quaqua.QuaquaLookAndFeel を足せば、Quaquaを使わせることが出来ます。


上記の設定で、AquaっぽいLAFでJava6が使えるようになります。

JConsoleもこのとおり。