2008-09-17

eclipseのmaven dependenciesでソース参照 (ついでにJavaDocも)

eclipseのプロジェクトでmavenを使って開発をしている際、デバッグなどでどうしてもmavenで持ってきたjarのソースを参照したくなり、でもすでに構築しているのでいまさらmvn eclipse:eclipseをしたくなく(結局したけど)、既存の状態からいかにソースを参照させるかという観点で対応。

簡単にまとめ

m2eclipseを導入
eclipseの設定のmavenでDownload Artifact SourcesとDownload Artifact JavaDocにチェック
pom.xmlに以下を追加

<plugin>
<groupid>org.apache.maven.plugins<⁄groupid>
<artifactid>maven-eclipse-plugin<⁄artifactid>
<version>2.4<⁄version>
<configuration>
<downloadsources>true<⁄downloadsources>
<downloadjavadoc>true<⁄downloadjavadoc>
<⁄configuration>
<⁄plugin>
mvn eclipse:eclipseを実行
.classpathとか.projectファイルが更新されてしまうので元に戻す
そのままではビルドがエラーのままなので、一度maven dependenciesを無効にしてから、もう一度有効にする
でOKななずだったが、
The version cannot be empty.
というエラーでpom.xmlが赤くなる
いろいろ調べて以下のサイトに情報がありました。
org.apache.maven.wagonにversionタグがなかったために出ていた様子
こいつを追加したら無事成功

2008-09-16

Subversion操作メモその2

さっそくその2
今度は
リポジトリにあるディレクトリを別のディレクトリに履歴ありでコピー(または移動)する
というもの
ちょいとてこずりました

基本手順は svnadmin dump → svndumpfilter → dumpファイル編集 → svnadmin load
こいつらはすべてサーバー側で行わないとダメ。
  1. svnadmin dump でリポジトリのダンプをとる
  2. svndumpfilterで特定のディレクトリのみにしたり、特定のディレクトリのみ除外したりする
  3. 出来たdumpファイルをロードしたいリポジトリの構成にあわせ編集
  4. svnadmin loadでロード
まず1と2(面倒くさいのでパイプで処理)
  svnadmin dump /hoge/svn/rep1 | svndumpfilter include hoge > hoge.svndump
この場合/hoge/svn/rep1にあるsvnリポジトリのダンプを取る
「svndumpfilter include hoge」で、その中のhogeというディレクトリのみ対象とする
「指定以外のディレクトリ」としたい場合はexcludeオプションで
指定するパスが複数ある場合はスペースで区切る
新規リポジトリなどに新たに移行するときなどはsvndumpfilterにさらに以下のオプションを指定
  • --drop-empty-revs
    空リビジョンを出力しない
    これをしないと「単に番号が飛ばないようにするための空のリビジョンです。」的なリビジョンが出来る
  • --renumber-revs
    上記オプションだけだとリビジョン番号が飛んでしまうのでこれを指定

次に3
出来たdumpファイルのままだと、元のリポジトリのパス構成のまま新しいリポジトリにコピーされてしまうので、テキストエディタなり、perlなりで「Node-path」の部分を編集
上記dumpだと
Node-path: hoge/subdir
のように出力されているはずなので、ここを編集
ここで指定したNode-pathは、次でloadする際にparent-dirで指定するディレクトリの下に出来るディレクトリになる
ただし、Node-pathで編集したパスの最下層より一つ上までのディレクトリはあらかじめsvn mkdirで作成しておかないとダメ

次に4
  svnadmin load --parent-dir huga /hoge/svn/rep1 <  hoge.svndump
でロード。
できるはずが、ここで問題発生
対象のリポジトリにもよるのであろうが、たとえばファイルを移動(コピーしたあと削除)しているような操作を行っていたリポジトリの場合などはload中に「ファイルが見つかりません」とかいって落ちる様子。

再度dumpファイルを修正
今回の場合は
  Node-path: file1
  Node-action: add
とかなっているあとに
  Node-path: file2
  Node-action: add
  Node-copyfrom-path: file1
となっていて、その後
  Node-path: file1
  Node-action: delete
となっていたので、
最初のエントリのNode-pathをfile2にしてしまい
ほかの2エントリを削除

他には上記の例でNode-path: file2のときに同時に修正している場合
この場合は2つ目のエントリのNode-acitonをchangeにしNode-copyfrom-revとNode-copyfrom-pathという属性を削除し、deleteしているエントリを削除しました

んで、無事完了

参考にさせていただいたサイト



10/28/2008 追記
4の後のdumpファイルの修正がこんなことしなくてもよかった。
3の時点でNode-pathだけでなくNode-copyfrom-pathも新しいパスに変えてしまえばよいようです。

Subversion操作メモその1

仕事でよく使うSubversionで今まで困ったことが起こった際に対応したときのメモを書いておきます。
「その2」以降があるかはわからないけど。

間違ってsvnのリポジトリ内のディレクトリを消してしまい、元に戻す方法svn copyで一つ前のリビジョンをコピーする
プロジェクトで間違ってリポジトリ内のディレクトリを消してしまった奴がいて、あわてて調べて以下のコマンドを実行
結構大きなリポジトリでも瞬殺で完了

  svn copy --revision XXX URL1 URL2

XXXは削除前のリビジョン番号
URL1は削除してしまったディレクトリのURL
URL2は削除してしまったディレクトリの親ディレクトリのURL