ラベル maven の投稿を表示しています。 すべての投稿を表示
ラベル maven の投稿を表示しています。 すべての投稿を表示

2011年2月5日土曜日

antプロジェクトmaven化してみた。

0 コメント


仕事で使ってる社内のjavaライブラリがあるんだけどこれが昔ながらのantのみのモジュールでつくられていた。まぁわざわざmaven化するほど困ってるわけではないんだけども、このライブラリはいくつかのプロジェクトで利用されていて、バージョン管理とかをきちんとしたいのとmavenの練習になるかなってことでこのプロジェクトをmaven化してみた。







依存ライブラリの解決

まずは依存*1しているライブラリの洗い出し。


最初、eclipseのmavenプラグインを使ってEclipseから検索してpom.xmlを書き換えてたんだけど、途中でなぜかバグって依存ライブラリの記述が全部消えたorz。なんというかEclipseのプラグインって完成度がまちまちだからこういうことがよくあるんだよな。これでますますEclipseを離れたくなった。Eclipseも嫌いじゃないけど、やっぱ俺はemacsラブ。marabal-mode最高...と言いたい。


ということで素直に下記サイトで地味に検索して依存関係を潰していった。


http://mvnrepository.com/


このサイトの検索ボックスにライブラリの一部の文字列を入力すると検索結果がでるのでそこからめぼしのものを選んでdetailリンクをクリックすると、pom.xml用のタグが表示される。mavenのリポジトリは他のツールでも利用してるらしくmaven用ツールのほか、いろいろな依存関係の記述例が表示されるのが気になった。


これら依存関係のタグをpom.xmlにコピペしてその都度



$ mvn compile


していきながらコンパイルが成功するまで地味な作業の繰り返していった。


java-mail


その途中でjava-mailの依存関係を解決できなかった。このjarはmvnrepository.comの検索では見つかるものの、いざコンパイルをかけるとダウンロードでこけてしまう。ここをみるとライセンス的に怪しいという。


http://d.hatena.ne.jp/shinsuke_sugaya/20060503/1146608133


もともとmvnrepository.comにあったものが、移動したのだろうか?


その後、ググッて見つけた以下を参考にして新しくリポジトリを追加することで解決した。


http://d.hatena.ne.jp/Aileron/20091207/1260175613



<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.2</version>
</dependency>

<repositories>
<repository>
<id>maven-repository.dev.java.net</id>
<name>Java.net Maven Repository</name>
<url>http://download.java.net/maven/2/</url>
</repository>
</repositories>


joglのリポジトリ


ところでこのリポジトリのURLはjava.netである。たしかjoglがjava.netで開発されてたので気になって検索してみたらあった。


http://download.java.net/maven/2/net/java/jogl/jogl/


joglもjava.netのリポジトリには登録されてるのね。rcというのが気になるけどこれを気にjoglのmavenを使ったビルド環境をもう一度見直してみよう。


社内リポジトリ


とまぁそんな地味な作業を重ね、ビルドが成功するようになった。完成したjarを社内リポジトリにインストールしたい。



## jarを生成
$ mvn package


まず、mavenの社内リポジトリをおく場所。これはsvnリポジトリをおいてる場所と同じにした。このsvnにはssh経由でアクセスしてunixユーザの権限で管理しているのでmvnリポジトリも同様にしたい。







リポジトリID hoge.com
リポジトリURL ssh 192.168.1.1:/usr/local/maven2repo

そこでまずリポジトリ用のディレクトリを作成した。



$ ssh -A 192.168.1.1
$ cd /usr/local/
$ sudo mkdir maven2repo
$ sudo chown -R root:dev maven2repo
$ sudo chmod -R 774 maven2repo
$ sudo chmod g+s maven2repo


devグループに属す人なら誰でもアクセスできるようにしたつもり。


で、今回maven化したプロジェクトのpom.xmlに以下のように登録先の情報を記述する。



<distributionManagement>
<repository>
<id>hoge</id>
<name>Hoge Repository</name>
<url>scpexe://192.168.1.1/usr/local/maven2repo</url>
</repository>
</distributionManagement>


ビルド作業しているホストの以下のディレクトリにsettings.xmlを準備する。




  • ~/.m2/settings.xml



<?xml version="1.0" encoding="UTF-8"?>
<settings>
<servers>
<server>
<id>hoge.com</id>
<username>${username}</username>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration>
<sshExecutable>ssh</sshExecutable>
<scpExecutable>scp</scpExecutable>
</configuration>
</server>
</servers>
</settings>


デプロイコマンドは以下



$ cd ~/dev/goocore
$ mvn deply


以上でデプロイ完了


今回ハマったのは、ssh -A のようにエージェントフォワードしてる環境でのscpによるデプロイ方法。ググッてすぐに出てくるのはみな、usernameとprivatekeyのパスを設定する例ばかりで、今回のように鍵はエージェントフォワードしてる場合の設定例がなかなか見つからない。そんななか下記の参考を発見できたおかげで無事解決できた。感謝です!てかマニュアルちゃんと読めって話だよね。


http://yasushi.stbbs.net/c/articles/2006/03/23/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9


所感


今回の作業のなかでivyというビルドツールの存在を知ったのだが、これがなかなか良さげ。このツールはantのタスクで、mavenのリポジトリを流用してjarの依存関係を解決してくれる。対するmavenは確かに便利なんだけども、依存関係の解決以外にたくさんの機能が備わっててものすごく大袈裟に見える。そもそもこれらの機能はほとんどど使わないし、中身はブラックボックスだからビルド方法を変えようと思っても気軽に拡張できない。その点ivyはantのいちタスクであるため、見通しもいいし簡単にビルドルーチンを改造できる。仕事で使ってるプロジェクトはどれも小規模なものばかりなので、mavenではオーバースペックかもしれない。そう考えると、ほんとに大規模なプロジェクト以外はどれもantですまして、必要に応じてivyを使ったりするのがべストかもしれない。mavenには豊富なプラグインが用意されていてリリースツールや継続的インテグレーションツールなどとの連携が充実してるように見える。しかし、これについてはantにもいえそうなことで、大抵antタスクがあるような気がする。逆にmavenからの利用だと導入コストが高そう。軽量そうなivyと重厚なmaven。どちらかというとivyのほうが魅力的に思える。とはいってもmalabar-mode使うにはpom.xmlが必要だから結局mavenを使いそうだけども。


ivyとかビルドのことについて、以下のサイトとその先の紹介サイトが大変参考になりました。


http://d.hatena.ne.jp/wyukawa/20101122/1290440174




*1:どうでもいいけど「依存」って「いそん」て読むんだよね。「既存」も「きそん」。アナウンサーとかの発音きくとわかるよ。この業界「既存」を使うことが非常に多いんだけど、いまだかつて「きそん」と発音する人を見たことががない。ただし「保存」は「ほそん」ではなくて「ほぞん」だよ。





2007年4月16日月曜日

maven2とeclipseを使ったjogl開発

0 コメント


はじめに


ここではjoglでゲーム開発するためのお勧めの環境構築方法を紹介します。つまりは私の開発環境です^^。使用するツールは以下です。



  • Eclipse

  • Maven

  • Java2SDK


両方ともjavaの世界では有名なので知っている方も多いでしょう。特にEclipseはかなり普及している統合IDEです。Javaで仕事をしたことがあれば、大抵の方は利用したことがあるのではないでしょうか?


Mavenは、C言語でいうところのmakeツールです。ただしmakeよりはるかに高機能です。このツールを使うとライブラリの管理やパッケージの作成、テストなどが自動処理でき、いろいろと楽できます。


Java2SDKのインストール方法は割愛します。最新版を入れて置けばよいでしょう。


eclipseのインストール


以下はインストーラーを使った方法です(自前でインストールする場合に比べて必要なプラグインが最初から揃っているので楽です)。


手順を示します。



  • 分割されたファイルをダウンロード

  • ファイルを連結

  • インストーラの起動


分割されたファイルをダウンロード

ここからAll-In-One Eclipseの最新版をダウンロードします。


連番のファイルとbatファイルがあるのですべて落としてください。


ファイルを連結

これらの連番ファイルとbatファイルを同じディレクトリに配置し、バッチファイルを起動します。するとexeファイルができるのでそれを実行すればインストーラが起動します。


インストーラの起動

インストーラの操作は得に難しいところはありませんが、途中プラグインを選択する場面があります。デフォルトで選択されているWebToolsPlatformは確実にいらないので外したほうがよいでしょう。


私は以下のものを選択しました。



  • VisualEditor

  • Test&performance

  • AspectJ

  • misc


ここでOKをクリックすればインストールが始まります。


結構時間がかかるので一息つきましょう。


インスールが終わるとEclipseが起動します。


最初にワークスペースを聞かれるのでドライブ直下などを指定して完了です。(MyDocument配下はパスにスペースを含むのでお勧めできません。)




mavenのインストール


ここから最新版をダウンロードし展開します。


展開したディレクトリにあるbinを環境変数PATHに加えてインストールは完了です。


DOS窓を開いて以下で確認しましょう。



mvn --version




joglのインストール


以下の手順でインストールします。



  • dllのインストール

  • jarのインストール


dllのインストール

ここから jogl-1_0_0-windows-i586.zipをダウンロードします。


展開したディレクトリにあるdllファイルを以下にコピーします。



c:/windows/system32


jarのインストール

joglはmavenリポジトリに登録されてないので、自前でローカルリポジトリにインストールする必要があります。


ローカルリポジトリにインストールするにはmvnのinstallを使用します。



mvn install:install-file -Dfile=jarまでの絶対パス \\
-DgroupId= -DartifactId= -Dversion=バージョン -Dpackaging=jar


例えば、C:\foo\hoge.jar をgroupId=hoge、artifactId=hoge、バージョン1.0としてインストールするには



mvn install:install-file -Dfile=C:/foo/hoge.jar -DgroupId=hoge \\
-DartifactId=hoge -Dversion=1.0 -Dpackaging=jar


とします。


以下は私が実際に使用したコマンド例です。適宜自分の環境に置き換えてください。



mvn install:install-file -Dfile=c:/tmp/jogl.jar \\
-DgroupId=jogl -DartifactId=jogl -Dversion=1.0.0 -Dpackaging=jar




MavenとEclipseとの連携


MavenとEclipseとの連携方法を以下に示します。


ここではeclipseワークスペースがd:/workspaceであるとします。実際には自分の環境に適宜置き換えてください。



  • M2_REPO変数を作成する

  • mvnプロジェクトの雛形を作成

  • pom.xmlを記述する

  • mvnプロジェクトをEclipseのプロジェクトに変換する

  • 作成したプロジェクトをEclipseにインポートする




M2_REPO変数を作成する

M2_REPOとはEclipseに対してローカルリポジトリの絶対パスを教えるための環境変数のようなものです。 最初に一度だけ設定すれば以後このコマンドは必要ありません(ただしワークスペースを変更した場合は再度実行が必要です)。



mvn eclipse:add-maven-repo -Declipse.workspace=d:/workspace




mvnプロジェクトの雛形を作成

以下のコマンドでmvnプロジェクトを作成します。



cd d:/workspace
mvn archetype:create -DgroupId=hoge -DartifactId=fuga -Dversion=0.0.1


これはarchetypeプラグインのcreateゴールを実行するという意味です。


このコマンドを実行することにより、d:/workspace配下にfugaディレクトリが作成され、ソースツリーおよびpom.xmlが生成されます。


groupIdプロジェクト全体の識別子を指定します。eclipseプロジェクトよりもさらに大きい単位と考えてください(実際にはjavaのパッケージとして扱われます)。


artfactIdはプロジェクト識別子を設定します。プロジェクト名を指定すればよいでしょう。


versionは適当に設定します。




pom.xmlを記述する

生成されたpomファイルにjoglの設定を追加します。


dependenciesタグ内に下記のdependecyタグを追加してください。



<dependencies>

<dependency>

<groupId>jogl</groupId>

<artifactId>jogl</artifactId>

<version>1.0.0</version>

<scope>compile</scope>

</dependency>

</dependencies>


他にも必要なライブラリがあれば適宜ここに記述します。


下記はochaglライブラリの例。



<dependency>

<groupId>ochagl</groupId>

<artifactId>ochagl</artifactId>

<version>0.0.1</version>

<scope>compile</scope>

</dependency>


mvnプロジェクトをEclipseのプロジェクトに変換する

続いてeclipse用のプロジェクト設定ファイルを作成します。



cd d:/workspace/hoge
mvn eclipse:eclipse -DdownloadSources=true


eclipseプラグインのeclipseゴールを実行することによりeclipseのプロジェクトファイルが生成されます。


downloadSourcesは依存するライブラリのソースをどうするかの設定です。デバッグ時に便利なのでtrueにしてあります。




作成したプロジェクトをEclipseにインポートする


  1. Eclipseを立ち上げ、[ファイル]-[インポート]-[一般]-[既存プロジェクトをワークスペースへ]を選択します。

  2. ルートディレクトリの選択でワークスペースを選択します。

  3. 選択をすべて解除ボタンをクリックします

  4. 先ほど作成したプロジェクトディレクトリを選択します

  5. 終了ボタンをクリックします


以上でmvnからeclipseへのプロジェクトの変換が完了です。




リソースファイルの追加方法


後の展開としてアプレットやJWSの利用を考えている場合、画像ファイルなどのリソースファイルは、クラスパス上に追加したほうが良いです。


まず、以下のようにresourcesフォルダを作成します。



cd d:/workspace/hoge/src/main/
mkdir resources


続いてeclipseのパッケージエクスプローラ上で対象プロジェクトを右クリックし


[新規]-[ソースフォルダー]で上で作成したフォルダーを指定して完了です。


あとは必要なファイルをこのフォルダに格納します。




参考サイト