タグ「Eclipse」が付けられているもの

HiveをEclipse使って開発しようとするとき、こちらのページには以下のようにしましょうねと書いてあるのですが、

$ ant clean package eclipse-files
$ cd metastore
$ ant model-jar
$ cd ../ql
$ ant gen-test

最後の ant gen-test を実行すると、以下のエラーが発生します。(trunkのrev 1293919で確認)

BUILD FAILED
/home/tamtam/work/hive-trunk/ql/build.xml:116: Problem: failed to create task or type if
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

<if>というタスクが無いよーというエラーです。 ${hive.root}/testlibs/ant-contrib-1.0b3.jar このJARファイルのIfTaskは中に入っており、build.xml中でtaskdefしてあげないといけません。以下の定義を追加してあげる必要があります。${hive.root}/build.xmlには定義されているんですけどね。。

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
  <classpath>
    <pathelement location="${hive.root}/testlibs/ant-contrib-1.0b3.jar"/>
  </classpath>
</taskdef>

この定義をql/build.xmlのgen-testのtarget配下に書いてもいいのですが、いろんなbuild.xmlがbuild-common.xmlをimportしていて、さらにbuild-common.xmlでも<if>タスクを使っているので、build-common.xmlに定義するのが良いかと思います。

diffはこんな感じです。

Index: build-common.xml
===================================================================
--- build-common.xml    (リビジョン 1293919)
+++ build-common.xml    (作業コピー)
@@ -89,6 +89,12 @@
   </condition>
   <import file="build-offline.xml"/>

+  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
+    <classpath>
+      <pathelement location="${hive.root}/testlibs/ant-contrib-1.0b3.jar"/>
+    </classpath>
+  </taskdef>
+
   <!--this is the naming policy for artifacts we want pulled down-->
   <property name="ivy.artifact.retrieve.pattern" value="[conf]/[artifact]-[revision](-[classifier]).[ext]"/>

つか、誰も困って無いのかな・・。
それっぽいチケットも無いんだけど。

Eclipse3.5を入れて、CTRL+クリックでジャンプする時にInterfaceかImplemented Classかを選択する事ができるのがすごい便利なんです。特にInterfaceベースのDIをしまくるプログラムを書いていると重宝します。

で、ブレークポイントを設定しても止まってくれないのです。正確には、最初の1回だけは止まります。その後、全てのブレークポイントが無視されますΣ(゚д゚lll) なんでかなーと思ったら、同じ症状の人を発見しました。

どうやらEclipseは関係なく、JDK6u14のバグらしいです。u14から圧縮ポインタ(?)や新しいGCアルゴリズムが追加されているのですが、GCが悪さをしているのかなぁ。。BugID:6862295で登録されています。仕方ないのでJDK6u13を探そうとしたら、JDK6u15がリリースされていました。日本語のリリースノートも出ています。それによると、、

Java ™ Virtual Machine Tool Interface (JVM TI) のブレークポイントは、並列スカベンジガベージコレクタ (-XX:+UseParallelGC) または並列圧縮ガベージコレクタ (-XX:+UseParallelOldGC) が使用されている場合のみ信頼できます。

ほかのコレクタが使用されている場合は、ブレークポイントが機能しなくなることがあり、フル GC 処理の実行後に JVM TI オブジェクトタグが使用不可になることがあります。Java ™ Debug Interface (JDI) ThreadReference には、JVM TI オブジェクトタグに依存する埋め込みのスレッド ID があるため、この埋め込みのスレッド ID が予期せず変更されることがあります。これにより、スレッドベースの JDI イベントに混乱が発生する可能性があります。

シリアルガベージコレクタ (-XX:+UseSerialGC) はこの問題に対して脆弱ですが、一部のプラットフォームではデフォルトで選択されることに注意してください。この問題を回避するには、コマンド行オプション -XX:+UseParallelGC を使用して並列スカベンジコレクタを明示的に選択します。

との事です。(´ε`;)ウーン…。

JDK6u15ではタイムゾーン関連が更新されているようです。
tzdata2009iはバングラディッシュ関連??
それよりも「ヨルダンの新規則により、tzdata2009h 以降の SimpleTimeZone 解析に障害が発生する」これでしょう(;´Д`) タイムゾーンや夏時間は本当にめんどくさいですね(´・ω・)

追記:JDK6u16がさっそくリリースされてピンポイントで修正されていました。

CodeSugar

  • 投稿日:
  • カテゴリ:

JDK6u4がリリースされちょります。
主にBugFix関連だけど、Timezoneのパッチが既に含まれているような事がRELEASE NOTEに書いてあったような気がします。

さて、Javaでクラスを作成していると、決まったコードを記述するのが面倒になります。
hashCodeやEqualsが良い例なのですが、これはEclipse3.3には標準で生成機能が付いているので問題ないのですが、toString()を良い感じに生成してくれる機能がありません。そこで、探したらあっさりと見つかりました。

一つはCommonsLANGに依存するコードを生成するらしいので除外。
CodeSugarというやつがそうです。
http://sourceforge.net/projects/codesugar/

Eclipse3.3で動作確認しました。

ちょっと気になる点としては、
・PackageExplorerで対象クラスを選択しないとメニューが有効にならない事(エディタにフォーカスがあるとダメ)
・生成するコードでStringBufferを使用しているがStringBuilderを使って欲しい(´・ω・)

と、オープンソースだから、自分で修正しちゃえば良いのか(´・ω・)

 

そういえばEmEditorのバージョン7が正式リリースされてた(`・ω・)
さっそく更新。単語補完機能が便利そうだけど・・・ 大文字のみで補完するのは勘弁してください。。。
どっかに設定でもあるのかな・・・(;´Д`)