Eclipse と Mercurial と Gradle

Menu

指定された大きさのファイルを作成するプログラムを作成する。

以下の環境で動かすこと。

    Mac OS X ( Note PC 上)
    Virtual Box 上で作成した仮想PC (Fedora Linux) 上

プログラミング言語は、

    Java 8

Java 8 は、Mac OS X 上と、Linux 上での両方での動作を確認すること。

ソースコードは、

    Java は Mecurial で、yomitan.ie.u-ryukyu.ac.jp:/net/home/hg/y10/e105701/os/1.1 などに上げる。

Mercurial plug in , Gradle plug in を使って下さい。

Repository は課題毎に別に作成する。


Project を作る

Eclipse と Java8 を install して、Java8 のプロジェクトを作る。

まず、最新のEclipse と Java8 を設定します。

OS は、Mavericks を使うこと。


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/FileWrite

repository の 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 -C

repository の 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 を示して指摘せよ。


Shinji KONO / Mon Sep 22 11:15:49 2014