log
左がGRINEdit0.10時点の設計、右がGRINEdit0.20で目指す設計です。 XML-RPCやJythonなどいろいろな方法でアクセスできるようにする上で、そのそれぞれに違う入り口を作っていたのでは大変なことになるので一つにまとめようという発想です。そうしておかないと「Jythonで頂点を追加するのは~~~だけど、これはまだXML-RPCではサポートされていないから古い~~を使ってね」なんていうダメダメな事態が発生しそうだからです。一方で、JavaやJythonなどの「Javaオブジェクトに直接さわれる方法」で操作したい人にとっては、間にクッションが入ってしまうともどかしいので、より直接的にいじることが出来る方法を提供します。
__ Eclipseとの連携 Maven -TECHSCORE-を参考にしてM2_REPOに正しい値を入れたらEclipseでもビルドが通るようになりました。
あー、あとswtがmavenでjarを入手できるちょっと古いバージョンだと3.0系のdllを要求して起動できないので、そこをどうにかしないと行けない。EclipseのサイトからDLしてきた物をローカルリポジトリに入れればいいのか。
GRINEditを見ていて、制約解消にちょっと興味を持った。
僕も興味があります。教えてください(ぇ)
冗談はさておき、制約解消はGRINEditの肝でありながら、一番自信のないところでもあります。将来的にこの肝の設計がまずかったことに気がついたらどうしよう。
僕が自分のサーバにmavenのしきたりに則った形でgrineditのjarを置いて、プラグイン開発者の方にはmavenのミラーの設定で僕のサーバを指してもらえばいいのかな?
あー、動的リンクされたライブラリからJythonでうまくimportできていない問題。どうしよう。
プロジェクトルートにswt.dllをコピーしてEclipseからも実行できるようになった。そのままでは実行時に(本来ExecutableJarと同じ場所にあるべき)config.pyを見つけられないので/src/main/resourceを実行時の作業ディレクトリに指定してみた。動いた。
Eclipseから起動したときには「Jythonからorg.eclipseのインポート」がきちんと出来、maven2.0でExecutableJarにしてswt.jarへはMANIFEST.MFのClass-Pathで指定した場合はうまく動かない。MANIFEST.MFはmavenが生成した物なのでつづり間違いなどの可能性はないだろう。そもそもメニューを生成するinitMenu.py内でのインポートに失敗しているだけで、Java側で生成するShellは表示されているわけだから。極めてやっかいな問題だ。どうしたらこんな現象が起こる?「MANIFEST.MFのClass-Pathに指定されている外部のJarは実行時に必要になったときに初めてロードされる仕組みになっており、かつJythonは自分のインスタンシエイトされたときにすでにロードされていたクラスしかインポートできない」とか。違うな…インスタンシエイトの時点ですでにSWTのShellが作られている…。
根本的な解決はとても難しそうだけど、対症療法は非常に簡単。 Javaの側でインポートは出来ているのでそのインポートしたオブジェクトをPythonInterpreterにsetしてやれば済む。ちゃんと動いた。 やだなぁ、対症療法。すっきりしないなぁ。
Maven対応のプロジェクトでEclipse側での実行と、「mvn package」を使ったExecutableJarの作成・実行の両方が出来るようになったので、こちらのプロジェクトを本流にしようと思います。さて。古い方のプロジェクトとこっちのプロジェクトのdiffをどうやって取ろう。西尾泰和のブログ: Pythonで指定したディレクトリの中を再帰的にdiff
dllはsrc/main/resourceの中に入れておいて、Eclipseの実行の設定で/src/main/resourceを実行時の作業ディレクトリに指定する。プロジェクトのルートに置く必要はない。
よーし、移行完了。 すっきりした。 これで、少なくとも古いプロジェクトの方で情報科学若手の会時点のデモは可能。あとsubversionで管理もしてみた。古いプロジェクトのAntはjarを作ってスクリプトやサンプルデータを、いらない物や公開しちゃ行けないデータを取り除きつつ適切にコピーしてくれて、ダブルクリックして動くことを確認してからzipで圧縮するだけでリリースできる状態にまでしてくれてたけど、今のmavenはjarを作るだけなので、前やっていたことまで出来るようにしよう。
CommonGatewayのaddVertexなどのメソッドは全部addObjectなどを呼び出すようになった。modVertexが呼び出すメソッドがmodObjectじゃなくてmodifyなのはやっぱダメかな。
modObjectに変えた。
眠い。