pom.xmlの依存ライブラリを.classpathに反映させるMavenプラグインを試験公開します

id:jflute さんのエントリがきっかけでニーズがありそうなことがわかったので、少し前に個人的に作ったMavenプラグインを試験公開します。

どんなプラグイン?

ひと言でいうと、Maveneclipseプラグインdependencyプラグインを足して2で割ったような機能を提供します。eclipse+classpathを文字って「eclipath」プラグイン。(相変わらずネーミングセンスありませんね。良いアイデア募集)

具体的には、pom.xmlに記述された依存ライブラリをeclipseプロジェクト上にコピーして、.classpath にクラスパスを追加します。ついでにソースやJavadocもあれば自動的にアタッチします。

pom.xmlの依存ライブラリを.classpathに反映させるだけならば mvn eclipse:eclipse でできますが、これだと既存の .classpath を再生成して上書きされてしまいます。eclipathプラグインは、既存の .classpath を読み込んで変更点だけ修正するので、eclipse に優しく、かつ依存ライブラリ管理ははpom.xmlに集約できます。

使い方

プラグインseasar.org にて公開させていただいているので、pom.xml の pluginRepositoryにseasar.orgを追加してください。

  
    
      maven.seasar.org
      The Seasar Foundation Maven2 Repository
      http://maven.seasar.org/maven2
    
  

あとは、plugins 要素の中に以下のように maven-eclipath-plugin を追加するだけ。
最低限ならこれだけで設定完了。

    
    ・・・・
      
        org.seasar.uruma
        maven-eclipath-plugin
      
    ・・・・
    

あとは、コマンドラインから

 mvn eclipath:sync

と打ちます。これで、pom.xmlの依存ライブラリ(jar)が eclipse プロジェクト配下の lib ディレクトリにコピーされ、.classpath にそれらのjarへの参照が自動設定されます。.classpathを読み込んで差分だけ更新して書き戻す仕様なので、独自にクラスパスコンテナなどを設定していても、それらの設定は残されます。

依存ライブラリが増えたり、バージョンアップしたときも、pom.xml を更新して eclipath:sync。新しいバージョンのjarを.classpathに追加して、古いものは削除します。

ただし、安全のため古いバージョンのjar自体はeclipseプロジェクトから削除しません。古いバージョンのjarを削除したいときは、

 mvn eclipath:clean

でjarファイルを削除します。

何が削除されるか事前に確認したいときは、

 mvn eclipath:check-clean

で削除するファイルの一覧だけ表示します。

また、pom.xmlの packaging もチェックしているので、Webアプリケーションでwarとなっている場合は、ライブラリのコピー先が src/main/web/WEB-INF/lib に切り替わります。

さらにscopeもチェックしているので、scopeがprovidedやtestになっているjarは、src/main/web/WEB-INF/lib ではなく、lib にコピーしたりします。(この辺のコピー先は細かく制御しようとすると設定が面倒になるので、eclipathプラグインで勝手にポリシーを決めています。利用者が多そうならば、すこしずつブログで紹介します)

もうちょっと細かい機能もいくつかありますが、とりあえず最低限の使い方を紹介してみました。

現時点での制限事項

  • 利用者の皆様のご意見や、作者の気まぐれでプラグイン名や仕様は変更する可能性があります
  • マルチモジュールプロジェクトではまだ試していませんので不具合がでるかもしれません
  • Maven3.0では一切動作試験していません
  • Windows環境でしか試験していません
  • mvn eclipse:eclipse と違って、.classpathをゼロから生成する機能は提供していません。(依存ライブラリに関する pom.xml と .classpath の同期を取ることに特化しています)
  • ソースコードJavadocは英語で書こうと頑張って途中で面倒になりました(笑)

要望/不具合報告などあればコメントいただければ対応検討します。(今あまり時間が取れないので、対応が遅くなる可能性大ですが・・・)

Eclipse3.6-SR2のパッケージ移動で固まるバグの解決方法

Eclipse3.6-SR2をインストールしてから、リファクタリング機能のパッケージ移動をするときに「ワークスペースの変更を作成しています」の状態で固まってしまう不具合が頻繁に発生していてかなりストレスの元になっていたのですが、ようやく原因がわかりました。

結論から言うとEclipseのWSTに含まれるStructured Source Model プラグインの不具合が原因。

解決編

WST(Web Tools Platform)をEclipse 3.6-SR2 に含まれている ver3.2.3 から ver3.2.4 にアップデートすることで解決できそうです。

  1. WSTダウンロードページからMaintenance Build 3.2.4をクリックしてダウンロードページを表示。
  2. 画面下の方の「Traditional Zip Files」から「wtp」をダウンロードします。
  3. wtp-M-3.2.4-20110420135235.zip」がダウンロードできたら、展開してeclipseディレクトリに上書きして再起動すればOK。
  4. アップデート後のStructured Source Modelプラグインのバージョンは 1.1.505.v201104070043 になっているはずです。

調査編(おまけ)

固まっている状態でJDK付属のVisualVMを立ち上げてEclipseVMの状態を調べたら、TIMED_WAITING のままのスレッドを発見。

止まっている個所が org.eclipse.wst.sse.core.indexing.AbstractIndexManager.waitForConsistent だったので、Eclipseソースコードリポジトリから該当クラスを探してリポジトリの履歴を見ると、以下のようなコメントを発見。

[340003] Refactoring dialog hung at AbstractIndexManager.waitForConsistent

これはSR2リリース後に修正されたバグでした。

それにしても、VisualVM はちょっと使わない間に地道に改良されてかなり使いやすくなってますね。スレッドダンプが一発で取得できたり、スレッドの活動状況をリアルタイムに表示できたり。

サバイバルにも役立つ(?)ロジカルシンキング解説書

震災から一ヶ月が経ちました。今日も大きな余震があり、なかなか落ち着かない毎日ですね。被災した皆様は一層のことだと思います。

さて、今回の一連の災害で強く感じたことは、氾濫する情報を私たち一人一人が選り分けて理解し、判断することがより一層求められているということです。

正確な事実を元に状況を正しく判断し、必要な行動につなげることが生死を分けます。

テレビや新聞といった従来のマスメディアは貴重な情報源ですが、その量や速達性でインターネットにかなわなくなっています。せめて正確性や、事実と解釈をきちんと分けて伝えることに努めて欲しいのですが、それすらままなっていないというのがこの1ヶ月の報道を見ていて感じたことでした。

そいういわけで、情報を正しく読み込み、解釈し、伝えるスキルはITエンジニアやコンサルタントとしてはもちろん、私たちが生きていくためにも役立ちます。(と、強引に繋げてみた!)

ITエンジニアのロジカル・シンキング・テクニック 新装版

ITエンジニアのロジカル・シンキング・テクニック 新装版

ロジカル・シンキングに関する本は今まで何冊か読んだことがありますが、正直どれも方法論だけを述べていて実践が伴わないので、いまいち頭に入ってこない、というのが私の感想でした。

本書の大きな特徴は以下の2点に集約されると思います。

  1. 独自の体系による従来のロジカル・シンキングの拡張と再定義
  2. 豊富な事例による習得のしやすさ

経験を積んだコンサルタント暗黙知となっていたテクニックを、「MALT」(Modeling As Logical Thinking、モルト)という独自体系で整理したことで、従来のロジカルシンキング本よりも大幅に理解しやすくなっており、先に述べた「情報を正しく読み込むこと、解釈すること、伝えること」もそれぞれMALTの一部として解説されています。

また、筆者の豊富な経験に基づいたリアルな事例が各所にちりばめられており、これらに取り組みながら読み込むことで、一層理解力が増します。(値段の割に中身もぎっしり書いてありますので、お買い得感もあります)

本書は2009年に出版されたものの、出版社の事情で一度絶版になってしまったものですが、今年になって新装版として復活しました。私が持っているのは初版の方ですが、非常に勉強になった本です。

「ちょっとしたいい歳」らしい

スマイルブームが発表したニンテンドーDS用BASIC処理系「プチコン」。かつてファミコンと同時に発表された「ファミリーベーシック」を彷彿とさせて懐かしい。

最近のゲーム機にあるようなポリゴンバリバリの3Dにこだわらず、昔ながらのBG面やキャラクターグラフィックス、スプライトを使ったBASICでゲームを作りつつプログラミング言語を学べるという割り切ったコンセプトが◎。

子供たちがこういったソフトでプログラミングの楽しさを学んでくれることを切に願う。(しかもたったの800円!ファミリーベーシックは\14,800もしたのに)

ちょっと気になったのが、ソフトウェアの配布。

 ただしセキュリティ上、プチコンがPCや不特定の相手などからプログラムを読み込むことはできません。一瞬残念に思われるかもしれませんが、プログラムリストを手打ちするのが基本だったことを思い出せば心のやすらぎにはなるはずです。

独自開発したBASICおよび実行環境である以上、ウイルス的な動きはさせられないようにサンドボックスで制限できるような気がするけど、万が一のリスクを下げるようにそうしたのかな?

それにしても、「あなたは(元)マイコン族ですか?」という質問に「はい、私はちょっとしたいい歳です」をポチッと押してしまう自分になんとなく悲しくなりながらも、次に表示されたページに思わず「おぉー!ベーマガじゃん!」とノスタルジーを感じてしまう私は、やっぱりいい歳らしい。。。

プロのためのLinuxシステム構築・運用技術

プロのための Linuxシステム構築・運用技術 (Software Design plus)

プロのための Linuxシステム構築・運用技術 (Software Design plus)

技評の編集さんから献本いただきました!どうもありがとうございます。m(_ _)m

シリーズ化を目指されているそうで、弊著『プロになるためのWeb技術入門』と似たタイトル・装丁になっています。

著者の方は10,000台以上のLinuxサーバの運用サポートに関わっており、業務レベルでの実際的なLinuxサーバ構築運用テクニックが多数説明されており、非常に参考になります。

『プロになるためのWeb技術入門』読者の方には、第4章の「Linuxネットワーク管理」は、Web技術入門では触りしか説明できなかった、パケット転送の仕組みが解説されているので、より理解を深められると思います。

個人的には1章のサーバ構築でのパーティーションの切り方ノウハウや自動インストール、5章・6章の内部構造や問題判別の記述は役に立つと思いました。

裏表紙にも書いてあるとおり「Linuxのインストール経験があり、基本的なコマンド操作とviエディタの操作ができる方」が想定読者なので、入門書というわけではありません。しかし、Linuxシステムの構築・運用に携わる方には非常に勉強になる書籍だと思います。

編集さんからは他にも2冊ほど献本いただいたので、また感想書きたいと思います。

3刷増刷大御礼

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

『プロになるためのWeb技術入門』、おかげさまで予想以上のスピードで3刷目の増刷連絡をいただきました。

いつもながら、読者の皆様・支えてくださった皆様に本当に感謝です。

正誤表に記載した2刷以降の修正点も反映予定です。

正誤表追加しました

少し遅くなりましたが、明けましておめでとうございます。

「プロになるためのWeb技術入門」について、少し前に読者の方からご指摘を頂いていたのですが、メールで返したまま正誤表を掲載するのをサボっておりました。

やっとのことで正誤表を更新しました。

内容は同一PC上で複数のブラウザを開いたときのセッションの扱いについてです。本書を執筆開始した当時のデファクトだったIE6やIE7では、異なるウィンドウでブラウザを開くとセッションは共有されなかったんですが、IE8以降やFirefoxChromeでは、セッションは共有されるんですね。そのあたりのことがきちんと書けていなかったので、追記しました。

年初から事務的な話ですみません・・・