Eclipse と Mercurial と Gradle
Menu指定された大きさのファイルを作成するプログラムを作成せよ。
以下の環境で動かすこと。
Mac OS X ( Note PC 上) Virtual Box 上で作成した仮想PC (Fedora Linux) 上プログラミング言語は、
Java 7 http://jdk7.java.net/macportpreview/Java 7 は、Mac OS X 上と、Linux 上での両方での動作を確認すること。
ソースコードは、
Java は Mecurial で、yomitan.ie.u-ryukyu.ac.jp:/net/home/hg/y10/e105701/os/1.1Mercurial plug in を使って下さい。
Repository は課題毎に別にして欲しい。
Project を作る
Eclipse と Java7 を install して、Java7 のプロジェクトを作る。まず、最新のEclipse と Java7 を設定します。
OS は、Mountain Lion を使うこと。
java の verion の確認
% java -versionで java のversion の確認を行う。
java API document
Orcale の site から API document を down load して、手元に置く。
Project の作成
FileWrite という Java7 project を作る仕様
引数で与えられた大きさ (10GB 以上も可能にすること) のファイルを作成するためのコマンド -s size で大きさを指定する ( 指定がない時には、BUFSIZ 分だけ書きだす) -b buffer_size 書き出し時に使用するバッファの大きさを指定する ( 指定がない時には BUFSIZ )以下は option
-n name で書きだす名前を指定する (指定がない場合は標準出力に書きだす) -c string ファイルに埋める文字列OutuptStream がバッファリングなしで、BufferedOutputStream がバッファありなので、BufferedOutputStream を使って実装するのが簡単。-c の string は1文字に制限しても良い。
hg に登録する
Eclipse の Mercurial plug in から 学科の hg repository に登録します。
Team から Mercurial local repository を作成 Team から commit ( Comment と File を選択 )Repository の clone を yomitan 上に作る
hg clone FileWrite ssh://yomitan.ie.u-ryukyu.ac.jp//net/home/hg/y12/e125722/FileWriterepository の hgrc を編集する
[paths] default = ssh://yomitan.ie.u-ryukyu.ac.jp//net/home/hg/y12/e125722/FileWrite [extensions] hgext.convert= [ui] username = 自分の名前 <xxxx@ie.u-ryukyu.ac.jp> ssh = ssh -Crepository の permission を確認し必要なら、755 にして他の人が読めるようにする。
Eclipse 上で FileWrite の動作を確認する
JUnit を使い、テストを作成せよ。
作成したプログラムの実行時間の測定
このプログラムにより、0 から 10GB までのファイルを作成する時間を測定し、グラフを作成せよ。グラフも repository に登録する。作成したファイルを repository に入れないように注意せよ。buffer size を 1 から 1MB まで変化さたグラフを作成せよ。
結果について簡単に述べて、考察をレポートに報告する。
hg log
作成した、repository を
ssh://yomitan.ie.u-ryukyu.ac.jp//net/home/hg/y12/e125322/os/FileWriteのように報告せよ。
学科のWebから hg repository が見えることを確認せよ。
また、
hg logを示せ。
Gradle と Mercurial の merge
Java によるファイルシステムの操作の repository を Mercurial に登録する。さらに、Maven Project に変更せよ。
gradle による packaging
build.grade に以下を付け加える。
version = '1.0' apply plugin: 'java' jar { from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }そして、
% gradle jarで、build/libs 以下に jar file ができる。これを使って、Java によるファイルシステムの操作を
% java -jar target/*.jar fileExample.Write -n hogeのように実行できるように、pom.xml を設定せよ。
cf. ssh://urasoe.ie.u-ryukyu.ac.jp//net/home/hg/teacher/kono/os/FileWrite3
Mercurial への push
Eclipse から Team->Commit, Team->Push を行って、変更を学科の repository に登録するうまく行かない時には、hg push を直接 working direcoty で実行してエラーを調べる。
ssh が正しく実行できる必要がある。
ソースの変更
Copy の例題に、既にファイルが存在する場合には、コピーしないコードを追加せよ。それを、commit/push する。
前の version へ戻る
Eclipse の Team->Switch を使って、ソースの変更前のコードに戻る。
衝突する変更
FileWrite の例題に、既にファイルが存在する場合には、コピーするかどうかをユーザに聞くコードを追加せよ。それを、commit/push する。push できないことを確認してから、さらに、force option で、push する。
複数のhead
workspace 上で、hg head を実行し、複数の head ができていることを確認する。
Test の追加
どちらかの version 上に、JUnit を使って、ファイルが存在する場合には正しくメッセージが出ることを確認する test を追加する。以下を build.gradle に追加する。 参考
dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } test { systemProperties 'property': 'value' }test は、src/test/java/packageName の下に置く必要がある。
gradle からもテストできるようにせよ。
hg merge
どちらかの version に switch し、もう一方への version への merge を実行する。
hg resolve
衝突が起きるので、それを解消せよ。Test は衝突がないはずである。コピーは衝突するはずである。それを確認せよ。
解消の解決
衝突が解消できたら、再度 commti push を行う。
head の確認
hg head で、head が一つになったことを確認せよ。hg web 上で、graph を見て、merge の様子を調べよ。
どこで、衝突が起きて、どこで解決されたかをレポートで log を示して指摘せよ。