倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

プロジェクトを持ち運ぶ・バックアップをとる

以前の記事で、プロジェクトの成果物をアーカイブにまとめる方法を見ました。 同様の方法で、ソース・コードなどをアーカイブにまとめることも出来ます。

アーカイブの生成方法は「assembly 記述子」というファイルで指定し、事前に定義されている「assembly 記述子」には

  • bin
  • jar-with-dependencies
  • src
  • project

の4つがあるのでした。

アーカイブの作成方法


名前的には「src」を使用すれば、ソース・コードをまとめたアーカイブが作成できそうですが*1マルチ・プロジェクトの場合にも適用できるように「project」を使用してアーカイブを作成しましょう。

アーカイブの作成手順は

  1. 最上位の POM ファイルに設定を追加する
  2. アーカイブを作成する

です。

最上位の POM ファイルを設定を追加する

フォルダ構造的に最上位の箇所にある POM ファイルに、以下の設定を追加します:

<?xml version="1.0"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sample</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0</version>

  <modules>
    <module>child1</module>
    <module>child2</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!-- 以下を追加 -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>project</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

少々注意点を:

  • <groupId>, <artifactId>, <version> 要素等は適宜読み替えて下さい。
  • <packaging>, <modules> 要素はある場合も、ない場合もあります。
  • ソース・コードはエンコーディングを指定しておいた方が無難です。 サブプロジェクトがある場合は、そちらも指定して下さい(親 POM ファイルで一括して定義すると楽かと)。

アーカイブを作成する

上記の POM ファイルの設定が出来たら、そのフォルダ上でコマンド・プロンプトから

mvn assembly:assembly

を実行して下さい。 結果として、「target」フォルダ下に

  • parent-1.0-project.tar.gz
  • parent-1.0-project.tar.bz2
  • parent-1.0-project.zip

が作成されます("parent" は上記 POM ファイルの artifactId)。

アーカイブをどう使う?


上記の方法で作成されたアーカイブは、普通に展開(解凍)すれば元のプロジェクトが復元できます。 このアーカイブの使い道は以下のものが考えられます:

  • プロジェクトのバックアップ
  • (リモート・リポジトリとしてではなく)HP 上からダウンロードするという形式でプロジェクトを公開する

2番目の使い道に関して。 このプロジェクト(の成果物)を使用したい人が、HP からこのアーカイブを「ダウンロード & 解凍」して、プロジェクトのベース・フォルダ上で

mvn install

を実行すると、その PC のローカル・リポジトリ上にライブラリを配備することが出来ます。 これは、前回に見た『リモート・リポジトリに登録されていない Jar ファイルを使う』の別の方法となっています。

*1:シングル・プロジェクトの場合は実際出来るのですが。