H2(1.4.187 Beta)をビルドしてEclipseで動かす
先日、H2をデバッグ実行する方法を書きました。今日は、H2をビルドしてEclipseに読み込み、テストを実行する方法についてまとめます。
次の環境で動作を確認しました。
- Mac OS X 10.10.2
- Eclipse Luna Release (4.4.0) Build id: 20140612-0600
- Apache Maven 3.1.1
- Java 1.8.0_40
1. ソースコードのダウンロードと配置
Downloadsから、「Version 1.4.187 (2015-04-10), Beta」のPlatform-Independent Zipをダウンロードします。
Eclipseのworkspaceディレクトリに、h2-2015-04-10.zipを展開します。h2というディレクトリが生成されるので、他のバージョンを展開する時のためにh2-2015-04-10へ名前を変えておくと便利です。
展開したディレクトリに移動します。
% cd h2-2015-04-10
2. JAVA_HOME環境変数の設定
ローカルマシンで利用可能なJavaのバージョンを確認します。
% /usr/libexec/java_home -V Matching Java Virtual Machines (6): 1.8.0_40, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home [...] 1.7.0_75, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
JAVA_HOMEの環境変数を確認し、設定されていない場合は設定します。H2は、JDK 1.6以上であればビルドできます。ここでは1.8.0を利用します。
% echo $JAVA_HOME % export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_40` % echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
H2はJavaでビルドを行うため、この設定が必要です。プロジェクトのルートにあるbuildスクリプトを実行すると、src/tools/org/h2/build/Build.javaの内容が実行されます。
3. H2をビルドする
プロジェクトルートのbuild.shを実行します。入力待ちの状態になるので、ターゲット「jarClient」を入力し、Enterキーを押します。
% ./build.sh - Shell mode. Type the target, then [Enter]. Just [Enter] repeats the last target. build> jarClient
初回ビルド時には、Mavenで依存ライブラリがダウンロードされるので、少し時間がかかります。自分の環境では90秒くらいでした。
ビルドが完了したら、Ctrl-Cで終了します。
4. Eclipseでプロジェクトをインポートする
Eclipseを起動し、[File]→[New]→[Java Project]を選択します。[New Java Project]ウィンドウで、次のように設定します。
- Project name: 下記の設定をすると自動補完されます
- Use default location: チェックを外す
- Location: 先ほどH2をビルドしたディレクトリ
設定後、[Next]ボタンを押します。
この時、「The output folder has changed. Do you want to remove all generated resources from the old location[...]」というダイアログが表示されるかもしれません。Eclipseがデフォルトで出力先にするbinディレクトリに、先ほどのビルドによる生成物が存在するので、.classファイルが存在するtempディレクトリをEclipseが出力先として選び直すそうです。その上で、binにあったものを消していいかどうかを尋ねています。どちらでもよいですが、ここでは「No」にしておきます。
Java PerspectiveのPackage Explorerペインに、作成したプロジェクトが表示されている様子を次に示します。
5. tools.jarへの参照を追加する
上の図を見ると、プロジェクトにエラーが出ています。Problemsペインで確認すると、com.sun.javadocパッケージのクラスを読み込めていません。そこで、tools.jarをビルドパスに追加します。
プロジェクトを右クリックし、コンテキストメニューから[Build Path]→[Configure Build Path]を選択します。[Add External JARs]ボタンを押します。JDKのルートのlibディレクトリにあるtools.jarを選択します。
プロジェクトにtools.jarが読み込まれると、エラーが消えます。
楽園の泉
面白かった。
- 作者: アーサーCクラーク,山高昭
- 出版社/メーカー: 早川書房
- 発売日: 2013/03/29
- メディア: Kindle版
- この商品を含むブログ (4件) を見る
finalfusionさんから『遥かなる地球の歌』とあわせて教えてもらって、読みました。
ハリウッド映画になってもおかしくなさそうな英雄譚(なってないのかな?)。心臓が止まりそうな終盤の展開も最高だった。人間離れというか、人類離れしたエピローグについては、なくてもいいのではと感じたけど、『幼年期の終わり』の作者らしいと思った。
前回の播種船に引き続き、よくある題材と聞いてはいたけど初めて読む「宇宙エレベーター」の話で、その面でも満足感があった。スリランカに似た舞台で、古代の王族の話(創作)を交えながら、混沌とした時間軸で話が進む。食い合わせの妙という感じ。
2015年2月に会社ブログに書いた記事と、振り返り
最近日記を書いてないので、思い出したように振り返り。
ブログ
1本だけ書きました。
- Jenkinsを導入したEC2インスタンスに常に同じ名前でアクセスする | Developers.IO
- Jenkins特に関係なかった。同僚の記事へのアンサーブログ
- 前職の某師から「同じドメインの上で社員同士殴りあうの美しい。もっとやれ」といわれたので、こういう記事が増えてもいいのかも(でもそういう文化はあまりない気がする)
仕事絡み
趣味
- 1月に引き続き、通勤中にKindleで読書が捗った
- Quartermaster General(クオマスと呼んでる)が面白くて、かなり遊んだ
- 複数人でも、1人でカードを眺めても楽しい
そんな感じでした。
遙かなる地球の歌
仕事でバタバタしていて感想を書いていなかった。読みました。面白かった。
- 作者: アーサーCクラーク,山高昭
- 出版社/メーカー: 早川書房
- 発売日: 2013/05/24
- メディア: Kindle版
- この商品を含むブログ (4件) を見る
『幼年期の終り』を読んだ後に、finalfusionさんからコメントですすめてもらって手に取りました(Kindleで読むと「手に取る」が論理レイヤーの動詞になるのがちょっと面白いですね)。前回と同じ作者の作品です。
『遙かなる地球の歌』は、『幼年期の終り』にくらべて人間ドラマ感がさらに強いわりに、視点人物が最後までほぼ常に冷静なので、こちらのほうが読みやすいかも。
そういえば、滅亡に瀕した人類が宇宙に送り出す「播種船」という箱舟の現代用語に、この本で初めて出会いました。最近読んだ『シドニアの騎士』にも同じものが出てきたので、ロボットやタイムマシンと同じくらい、この手のジャンルではよくある題材なのかもしれない。過去にSFをほとんど読んできていないので、こういったメタ知識を得ることも新鮮で面白い。w
作中では、何世紀も前に死んだ人々に登場人物たちが思いを馳せる場面が、何度も出てくる。それがすごくよかった。自分より圧倒的に高い知性が、生きていくこと死んでいくことのはかなさを美しく料理してくれた作品を味わうと、自分が抱える寂しさを慰撫されたように感じる。サラッサでモーセ・カルドアが籠っていた<最初の着陸地点>の大聖堂も、彼にとってはそういう場所だったのかもしれない。本はすごい。
H2をデバッグ実行する方法
H2のソースコードを読むために、H2をEclipse上でデバッグ実行する方法を説明します。依存ライブラリにH2を持つ空プロジェクトを作成します。
次の環境で動作を確認しました。
準備
以降の手順では、ビルドツールのGradleを使います。ダウンロードしてインストールしておきます。「gradle --version」としてバージョンが表示されることを確認します。
また、H2のソースコードからサンプルをコピーアンドペーストするので、Version 1.3.176のPlatform-Independent Zipをダウンロードして展開します。1.3.176は、現時点のLast Stableです。
1. 空プロジェクトの作成(任意)
Gradleのカスタムinitタスクを作成するスクリプトを、USER_HOME/.gradle/init.d/以下に配置します。
% cd ~/.gradle/ % git clone https://github.com/taichi/init_scripts.git init.d
2. H2のjarとソースコードのダウンロード
Eclipseのworkspace内に、プロジェクト用のディレクトリを任意の名前(h2-read)で作成して、移動します。
% mkdir ~/Documents/luna-workspace/h2-read % cd ~/Documents/luna-workspace/h2-read
手順1.を実行した場合
Gradleのコマンドで、空のJavaプロジェクトを作成します。
% gradle init % ls -la total 72 drwxr-xr-x 13 USER_NAME staff 442 3 8 23:05 . drwxr-xr-x 9 USER_NAME staff 306 3 8 22:59 .. -rw-r--r-- 1 USER_NAME staff 126 3 8 23:05 .gitignore drwxr-xr-x 3 USER_NAME staff 102 3 8 22:59 .gradle drwxr-xr-x 3 USER_NAME staff 102 3 8 23:05 .settings -rw-r--r-- 1 USER_NAME staff 11357 3 8 23:05 LICENSE -rw-r--r-- 1 USER_NAME staff 76 3 8 23:05 README.md -rw-r--r-- 1 USER_NAME staff 509 3 8 23:05 build.gradle drwxr-xr-x 3 USER_NAME staff 102 3 8 23:05 gradle -rw-r--r-- 1 USER_NAME staff 0 3 8 23:05 gradle.properties -rwxr-xr-x 1 USER_NAME staff 5080 3 8 23:05 gradlew -rw-r--r-- 1 USER_NAME staff 2404 3 8 23:05 gradlew.bat drwxr-xr-x 4 USER_NAME staff 136 3 8 23:05 src
自動生成されたbuild.gradleを編集して、H2をダウンロードするための設定を追加します。
% vi build.gradle
冒頭にプラグイン読み込みを追加します。
apply plugin: 'eclipse'
dependenciesに、次の行を追加します。
dependencies { compile 'com.h2database:h2:1.3.176' (略) }
手順1.を飛ばした場合
ディレクトリ(h2-read)のルートで、Gradleのビルドスクリプトを新規に作成します。
% vi build.gradle apply plugin: 'java' apply plugin: 'eclipse' repositories { mavenCentral() } dependencies { compile 'com.h2database:h2:1.3.176' }
共通手順
Gradleのコマンドを実行して、Eclipseプロジェクトを作成します。
% gradle eclipse :eclipseClasspath Download https://repo1.maven.org/maven2/com/h2database/h2/1.3.176/h2-1.3.176.pom Download https://repo1.maven.org/maven2/com/h2database/h2/1.3.176/h2-1.3.176.jar Download https://repo1.maven.org/maven2/com/h2database/h2/1.3.176/h2-1.3.176-sources.jar :eclipseJdt :eclipseProject :eclipse BUILD SUCCESSFUL Total time: 11.189 secs
プロジェクトルートに.projectファイルが作成されたことを確認します。
3. Eclipseへプロジェクトをインポートする
手順2.で作成したプロジェクトを、Eclipseにインポートします。
EclipseのJavaパースペクティブで、[File]→[Import]→[General]→[Existing Projects into Workspace]→[Next]と進み、「Select root directory」を選択して、先ほどのプロジェクト(h2-read)を指定します。[Finish]ボタンを押します。
手順1.を飛ばした場合
プロジェクトにソースフォルダが生成されないため、作成する必要があります。
Package Explorerでプロジェクト(h2-read)を右クリックして、コンテキストメニューから[New]→[Folder]と進み、「Folder name:」に「src/main/java」と入力し、[Finish]ボタンを押します。
作成されたフォルダを右クリックして、コンテキストメニューから[Build Path]→[Use as Source Folder]を選択します。プロジェクトの下に「src/main/java」というソースフォルダが作成されます。
4. H2テストコードの作成と実行
「src/main/java」を右クリックして、コンテキストメニューから[New]→[Class]を選択します。「Package」に任意の名前(test)、Nameに「HelloWorld」と入力し、[Finish]ボタンを押します。
zipでダウンロードしたH2のソースコードから、./src/test/org/h2/samples/HelloWorld.javaを取り出して、作成したJavaファイルにコピーアンドペースとします。その際、パッケージ名を先ほど自分で作成したパッケージ名に書き換えます。
編集前。
package org.h2.samples;
編集後。
package test;
EclipseでHelloWorld.javaを右クリックして、コンテキストメニューから[Run As]→[Java Application]を選択します。Consoleウィンドウに「Hello」と出力されたら、テストの実行は成功です。
幼年期の終り
コロニーにおける実験音楽の多くは、完全に意識的に、いわば"時の小節"とでも呼ばれるべきものと結合していた。人間の心がとらえることができる最短の音は何か あるいは、退屈を感じない範囲で堪えることのできる最長の音は? そしてその結果は、各種の条件を設定したり、または適当な管弦楽法を用いたりすることで変えられるのだろうか?
読み終わったばかりの『幼年期の終り』の一節から。次の記事を読んで思い出した。
iOS 7でも使えるというので、ダウンロードして使ってみた。カメラとフラッシュに指を当てて待つと、心拍数が測れるらしい。ユーザの心拍数と時刻を元に、なんらかのロジックで音楽が生成される。へぇ、という感じです。
まあそれは余談で、『幼年期の終り』。ものすごく面白かった。
- 作者: アーサー C クラーク,福島正実
- 出版社/メーカー: 早川書房
- 発売日: 2012/12/21
- メディア: Kindle版
- 購入: 3人 クリック: 125回
- この商品を含むブログ (20件) を見る
硬質なのに叙情的で、未来的なのに神話的。なんだこれはと思った。『百億の昼と千億の夜』のスケール感に近いかも(輪廻転生の話はない分、ドライだけど)
物語の中では百年くらい時間が経過する。その時その時の視点人物を取り巻く情景描写と意思の描写が生き生きとしていて、話に引き込まれる。翻訳が本当に素晴らしい。
特に、とある望みがついに叶わないまま晩年を迎え、枯れた木立の間をゆっくりと散歩する"リッキィ"の足元を吹いていただろう淋しい風のことを思うと、胸が詰まる。
最高でした。
人にタスクを手伝ってもらいたい時に提供すべき情報
タスクがあふれた時、同僚に助けてもらうには、どうすればよいか。逆に、どんな情報を提示してもらえば、同僚のタスクを引き受けやすいか。
切羽詰まっている時には、こういうことを考える余裕がありません。だから平時に考えておかなければならないと思います。
というわけで考えた。
情報の開示
- すべての情報は皆に見える場所に記録する
- 組織で使っているタスク管理ツールやwikiなどに書く
- チャットは流れるからダメ
- 以下の項目も、基本的に同じ場所に書く
- 最新の状況の説明
- 残っているタスクは何か
- 着手中のタスクは何か
- 着手中のタスクの完了目処はたっているか
アウトプットの定義
- タスクのアウトプットを具体的に定義する
- ゴール、終了条件といいかえてもよい
- ダメな例は、"Aの構築"とか、"Bの提案"とか
- こういうフォーマットでこういう目的の提案書を誰向けに作成する、とか
- Xの構築とYのインストールをしてfoo様に連絡してメールで返信をもらう、とか
- アウトプットの形式を定義する
- ドキュメント作成の場合、成果物の体裁について、受け取る相手の合意を得ておく
- 形式のサンプルを、皆に見える場所に貼り付けておく
- そこまで到達していないタスクには「このタスクのアウトプットの形式は未定義。決めることもタスクのうちです」と明示する(重要)
納期
- しめきり
- 日程締め切りと状況締め切りがある
- 何月何日まで、あるいは、fooさんの次のアポが取れるまでのどちらか近い方、とか
- 人に頼まずに依頼者が自分でやればどれくらいかかると思っているか
- すんなりいった場合の日数からハマった場合の日数まで、幅で出す
- 引き受ける側が、他のタスクとのバランスを考えるための材料の提示
- 能力を誇示する場ではないので、日数に見栄を張らないように
- その期間を超えたら、手伝ってくれていた人からタスクを返してもらう、くらいの気持ちで設定するとよいかも
- すんなりいった場合の日数からハマった場合の日数まで、幅で出す
必要なスキル
- タスク遂行に必須と思われる専門的なスキルがあれば書く
- そのスキルがない人に助けてもらうしかない場合は、ガイドを示す
- 参照する本、詰まったら相談できる人(依頼者自身でもよい)
- 依頼者が1h説明した後、残りをやってもらう、など
レビュー、仕上げ
- 依頼者が干渉した方がよいポイントはあるかないか。ある場合、タイミングはいつか
- レビューが必要なら前もって言うべし
- レビュー前提、スピード優先で、まず仕上げて欲しいのか
- 最初から最後までまかせられる内容なので、その人のスタイルで完遂を目指してもらうのがよいのか
こんなところかな。