倭マン's BLOG

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

Archetype -- 独自の archetype を作成する 其ノ弐

今回は前回に続き、独自の archetype の作成の仕方を見ていきます。

前回の「Archetype 作成プロジェクト」のテンプレートに対して行う変更は概ね以下の3つです:

  • Archetype 生成プロジェクト」のPOM ファイル
  • archetype-resources」フォルダ下のフォルダ構造とサンプルファイル
  • archetype.xml ファイル

図示すると下図のような感じ。



以下でサンプルを示す場合は以下の値を用います:

プロパティ名
groupId com.sample
artifactId archetype
version 0.1

Archetype 生成プロジェクト」のPOM ファイルを修正する


そのままでもキチンと動作するようですが、一応 <packaging> を "maven-plugin" に設定しておきましょう(下の例では必要のない要素を削除しています):

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sample</groupId>
  <artifactId>archetype</artifactId>
  <version>0.1</version>
  <packaging>maven-plugin</packaging>
</project>

archetype-resources」フォルダ下のフォルダ構造とサンプル・ファイルを変更する


Archetype 生成プロジェクト」に「src/main/resources/archetype-resources」という(パスの)フォルダが生成されているはずですが、この直下にプロジェクト・テンプレートのフォルダ構造とサンプル・ファイルを作成します。 ただし、空のフォルダは作成できないそうです。

デフォルトでは「archetype-resources」フォルダ直下から見て

  • 「src/main/java」フォルダに App.java ファイルが
  • 「src/test/java」フォルダに AppTest.java ファイルが

生成されています。

例えば、このプロジェクトの Web サイトのテンプレートも同時に生成したい場合、

  • 「src/site」フォルダ下に site.xml
  • 「src/site/apt」フォルダ下に index.apt を

作成します*1


ファイルの内容はとりあえず

mvn archetype:create -DgroupId=org.sample -DartifactId=sample
-DarchetypeArtifactid=maven-archetype-site-simple

(1行で実行)で「src/site」下に生成される同名のファイルと同じとしましょう。
site.xml:

<?xml version="1.0"?>
<project>
  <body>
    <links>
      <item name="Maven" href="http://maven.apache.org/"/>
    </links>

    <menu name="Documentation">
      <!--<item name="Xdoc Example" href="xdoc.html"/>-->
    </menu>
  </body>
</project>

index.apt:

 -----
 Title Here
 -----
 Author Here
 -----
 Date Here
 -----

Maven Site for your project

 Congratulations! If you are looking at this page then you have successfully generated a
 template site employing the site archetype and you have run:
  
+-----+

mvn site

+-----+

archetype.xml ファイルを修正する


最後に、上記で作成したフォルダの役割を指定する「archetype.xml」ファイルを修正します。 フォルダの役割とは、Java ソース・コードを置く「ソースフォルダ」なのか、プロパティ・ファイルなどのリソースを置く「リソース・フォルダ」なのかということです。

archetype.xml ファイルはベース・フォルダから見て「src/main/resources/META-INF/maven」下に作成されています*2。 上記のように Web サイトのリソースを追加した場合、archetype.xml は以下のように修正します:

<?xml version="1.0"?>
<archetype>
  <id>archetype</id>
  <sources>
    <source>src/main/java/App.java</source>
  </sources>
  <testSources>
    <source>src/test/java/AppTest.java</source>
  </testSources>
  <!-- ここを追加 -->
  <siteResources>
    <resource>src/site/site.xml<resource>
    <resource>src/site/apt/index.apt<resource>
  </siteResources>
</archetype>

このサンプルを踏まえて、archetype.xml のフォーマットを見ていきましょう:

  • ルート要素は <archetype>
  • <archetype> 要素下の <id> 要素の子テキストは「Archetype 生成プロジェクト」作成時に指定した artifactId

です。 <archetype> 要素下の <id> 以外の要素は

  • <sources> → ソースコードを置くソース・フォルダ
  • <resources> → リソースを置くリソース・フォルダ
  • <testSources> → テスト・コードを置くソース・フォルダ
  • <testResources> → テストに使用するリソースを置くリソース・フォルダ
  • <siteResources> → Web サイトに使用するリソースを置くリソース・フォルダ

という風にソース、リソースを分類します。 そして、これらの要素下の要素は

  • Java ソース・コードを置く場合(<sources>, <testSources>) → <source> 要素*3
  • リソース・コードを置く場合(<resources>, <testResources>, <siteResources>) → <resource> 要素

を書き、その子テキストをサンプル・ファイルへの(「archetype-resources」フォルダからの)パスにします。

以上で、プロジェクト・テンプレートのフォルダ構造は作成できます。 ファイルの内容の書き方は次回に。

Java魂―プログラミングを極める匠の技

Java魂―プログラミングを極める匠の技

*1:Maven2 プロジェクトでは、プロジェクトの Web サイトに関するリソースは「src/site」下に置くことになっています。

*2:新たに作成する場合は「src/main/resources/META-INF」でも構いません。

*3:この場合、プロパティの packageName (指定しなければ groupId)からそのパッケージ構造に対応するフォルダ構造が自動的に作成されるようです。 もう少し具体的に書くと、デフォルトの archetype のフォルダ構造では App.java ファイルが「src/main/java」フォルダ下に作成されてますが、この archetype を用いてプロジェクト・テンプレートを作成すると、「src/main/java/org/sample」フォルダ下(groupId=org.sample の場合)に App.java が作成されます。