Maven

<Maven>Maven2を学習中。ちらほら検索すると、pom.xmlがデフォルトエンコーディングで読まれるという情報もあった。確か、Maven1 のときもPOMで日本語が使えなかったので、バグをあげて、パッチを出したな・・・。Maven2 では、現在、修正されたのだろうか。まぁ、今のところ、pom.xmlで日本語を使わなければならない状況に達していないので、基礎を学ぶ。とりあえず、ポートレットのwarをビルドできるまでに至ったが、ビルドするにもMaven2用のリポジトリが必要なので、Maven1 からコンバートするようなスクリプトを書いた。Maven2用のリポジトリに、Jetspeed2のJarとか置かないとビルドできなかったりするため、変換する必要があった。一応、参考までに以下のようなものをPerlで書いた。

#!/usr/bin/perl
$maven1_repo=$ARGV[0];
$maven2_repo=$ARGV[1];
$tmp_file="/tmp/m2_repo.txt";
system("find $maven1_repo -type f | grep jars | grep '\.jar\$' > $tmp_file");
open(FILE, "$tmp_file");
while(<FILE>)
{
chomp();
my $jarfile=$_;
if($jarfile =~ /$maven1_repo([^\/]*)\/jars\/([^\d]*)-([0-9].*).jar/)
{
my $group_id=$1;
my $artifact_id=$2;
my $version=$3;
my $newdir=$maven2_repo."/".$group_id."/".$artifact_id."/".$version;
my $newjarfile=$newdir."/".$artifact_id."-".$version.".jar";
my $pomfile=$newdir."/".$artifact_id."-".$version.".pom";
print("mkdir -p $newdir\n");
system("mkdir -p $newdir");
print("ln -s $jarfile $newjarfile\n");
system("ln -s $jarfile $newjarfile");
open(POMFILE,">$pomfile");
print POMFILE "<project>";
print POMFILE "  <modelVersion>4.0.0</modelVersion>";
print POMFILE "  <groupId>$group_id</groupId>";
print POMFILE "  <artifactId>$artifact_id</artifactId>";
print POMFILE "  <version>$version</version>";
print POMFILE "</project>";
close(POMFILE);
}
}
close(FILE);

ごらんの通り、きれいなものではないが、とりあえず、Maven1のjarのシンボリックリンクを張り、pomファイルを生成する(もともとシェルスクリプトでちゃちゃっと書いたら、pomファイルがないと動かないことが判明し、perlに置き換えてみたりした。あとは重複して持つのも何だから、シンボリックリンクにしてみた)。まぁ、こんな感じで適当に書けば、Maven2でリポジトリが使えるようになると思われます。メーリングリストを調べると、ant を使ったコンバートするものもあるらしいが、使っていないのでその辺は不明・・・。とりあえずは、これでビルドできるようになったので、次の問題は、今まで、project.propertiesのようなところで設定していたプロパティをどのように設定すればよいのかが、よくわからん。こういう値は、プラグインの設定で与えるようになったのだろうか・・・。Maven2で作られたプロジェクトをもっと見てみたいところ・・・。何か良い例はないだろうか・・・。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です