m2eclipse を使って scp でデプロイ

Posted: , Modified:  

Maven2 のプライベートリポジトリを作成し, 公開鍵認証を行う scp プロトコルを用いて eclipse の m2eclipse プラグイン からデプロイする設定のメモ. なお,m2eclipse version 0.10.0 に含まれる Maven 3.0-SNAPSHOT では scp 認証に失敗する. 別途 Maven 2 系を ダウンロード して,eclipse のウインドウ → 設定 → Maven → インストールに追加しデフォルトに設定しておく必要がある.

準備が整えば,scp でアクセスする Maven リポジトリの作成から始める.作成するリポジトリの ID 及び,URL は次の通りとする.

つまり,/var/maven2/repo と /var/maven2/reposnap 以下にそれぞれのリポジトリ内容物を格納する. そのため,リポジトリを利用するユーザに /var/maven2/repo と /var/maven2/reposnap への読み書き権限を与える.

scp プロトコルを使用するためには,wagon-ssh エクステンションが必要となるので,pom.xml の build – extendsions に以下を追加する.

<build>
  <extension>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-ssh</artifactId>
    <version>1.0-beta-6</version>
  </extension>
</build>

次に,デプロイ先の情報を登録する.pom.xml の project に以下を追加.

<distributionManagement>
  <repository>
    <uniqueVersion>false</uniqueVersion>
    <id>foo.org</id>
    <name>Foo.org Repository</name>
    <url>scp://foo.org/var/maven2/repo</url>
    <layout>default</layout>
  </repository>
  <snapshotRepository>
    <uniqueVersion>true</uniqueVersion>
    <id>snapshot.foo.org</id>
    <name>Foo.org Snapshot repository</name>
    <url>scp://foo.org/var/maven2/reposnap</url>
    <layout>legacy</layout>
  </snapshotRepository>
</distributionManagement>

最後に,ssh のログイン情報を setting.xml に記述.なお,このファイルの場所は,eclipse のウインドウ → 設定 → Maven → User Settings に書いてあるが,デフォルトでは作成されない.もしなければ自分で作成し,下記の通り書き込めば良い.

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
          http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
      <id>foo.org</id>
      <username>USERNAME</username>
      <privateKey>PRIVATEKEY</privateKey>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    <server>
      <id>snapshot.foo.org</id>
      <username>USERNAME</username>
      <privateKey>PRIVATEKEY</privateKey>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
  </servers>
</settings>

なお,USERNAME はログインユーザ名,PRIVATEKEY は秘密鍵 (openssl 形式) へのパスである.Putty 形式の秘密鍵ではエラーになるので注意.

以上で,実行 → 実行構成 → Maven Build にて新規実行構成を追加し, pom.xml のあるディレクトリを基底ディレクトリに, ゴールをdeployに,Mavenランタイムに3.0-SNAPSHOTではなく2系列を選択して実行すればデプロイされる.うまくいかない場合は, c:/Users//.ssh に known_hosts を作成し,

<file * known_hosts>foo.org ssh-rsa PUBLICKEY</file>

などと書く.PUBLICKEY は公開鍵,ssh-rsa の部分は鍵の種類によって変わる.公開鍵を調べるのが面倒な場合は TeraTerm の ssh_known_hosts ファイルなどからコピーすれば良い.

作成したプライベートリポジトリを使用する場合は,pom.xml の repositories に以下を追加する.

<repository>
  <id>foo.org</id>
  <name>Foo.org Repository</name>
  <url>scp://foo.org/var/maven2/repo</url>
  <layout>default</layout>
</repository>
<repository>
  <id>snapshot.foo.org</id>
  <name>Foo.org Snapshot repository</name>
  <url>scp://foo.org/var/maven2/reposnap</url>
  <layout>legacy</layout>
</repository>

これは,distributionManagement に記述した物とほぼ同じである.

参考: