2013年10月27日日曜日

mavenコマンドの使い方(主にgoal)について調べたのでメモ

■環境
CentOS 5.9 64bit
maven 3.1.0
Java 1.7.0_05
mavenのインストール方法は以下を参照
http://kakakikikeke.blogspot.jp/2013/10/maven.html

■プロジェクトの作成
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app

通常のJavaプロジェクトを作成する場合のパラメータです
archetypeGroupIdは後述にもありますが、mavenで用意されたテンプレートみたいなものを設定します(独自で作成することも可能)
groupIdはいわゆるパッケージ名です
artifactIdはいわゆるプロジェクト名です

コマンド実行時に入力が必須の部分もあるので入力必須の項目のサンプルを以下に記載します
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 312:
  enter入力
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
  enter入力(1.1)
Define value for property 'version':  1.0-SNAPSHOT: :
  enter入力
確認
  Confirm properties configuration:
  groupId: com.mycompany.app
  artifactId: my-app
  version: 1.0-SNAPSHOT
  package: com.mycompany.app

■goal検証
maven自体にはgoalと呼ばるmvnコマンドに渡す引数がいろいろと用意されており
そのgoalの指定によりjarを作ってくれたりとかテストしてくれたりとか.classファイルを作ってくれたりとか振る舞いが変わってきます
基本はこのgoalの種類と動きがある程度わかっていればmvn自体は使えるようになると思います

またプラグインという概念があり、振る舞いをいろいろと変更、拡張できるのでメジャーなプラグインさえ覚えておけば大丈夫だと思います
プラグインは独自で作成することも可能です

ここで紹介するgoalやプラグインが全てではないので他のgoalについては以下のページなどを確認してください
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

以下で紹介するコマンドはプロジェクト配下のディレクトリ(今回だとmy-app)配下でpom.xmlがあるところで実行してください

・mvn compile
target/classes 配下にjavaコンパイルした.classファイルを作成してくれます

・mvn test-compile
target/test-classes 配下にコンパイルしたテスト用.classファイルを作成してくれます

・mvn test
target/classes 配下にjavaコンパイルした.classファイルを作成し
target/test-classes 配下にコンパイルしたテスト用.classファイルを作成し
target/surefire-reports 配下にテスト結果を作成してくれます
mavneデフォルトのテストツールは「JUnit」となっておりpom.xml内でdependencyが定義されています

・mvn package
target 配下にjarファイルを作成し
target/classes 配下にjavaコンパイルした.classファイルを作成し
target/test-classes 配下にコンパイルしたテスト用.classファイルを作成し
target/mavne-archiver 配下にpom.properties(プロジェクトのメタ情報ファイル?要調査)を作成し
target/surefire-reports 配下にテスト結果を作成してくれます
「jar:jar」「compile」「test-compile」「test」等をまとめて実行してくれるgoalです
test結果に関してはSurefireプラグインというプラグインを使っているようでテスト結果を統計的に見れるファイルも作成してくるようです
http://maven.apache.org/surefire/maven-surefire-report-plugin/

・mvn clean
target ディレクトリを削除してくれます
「compile」「test-compile」「test」「package」等を実行する前には実行する必要があります

・mvn install
作成した成果物(jarファイル)をローカルのmavenリポジトリに配備してくれます
具体的なパスは例えばrootユーザで実行した場合は
/root/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/
配下にjarやxmlファイルを展開してくれます
他のプロジェクトが成果物を参照する必要がある場合に実施します

・mvn archetype:generate
指定できる主なオプションは以下があります
  • -DarchetypeGroupId・・・作成するプロジェクトの元となるarchetypeを入力します
  • -DgroupId・・・パッケージ名を入力します
  • -DartifactId・・・プロジェクト名を入力します
groupIdやartifactIdは任意の値を入力することができます
archetypeGroupIdに関してはMavenCentralで公開されているarchetypeGroupIdを指定しなければいけません
ただ量が膨大で覚えるのはほぼ不可能です
なので省略することもでき、省略した場合はプロジェクトを作成するときにどのarchetypeGroupIdを使用するか選択することができます
一覧がずっと出てきて番号を入力することでarchetypeGroupIdを選択することができます
ただ、この一覧もものすごい量が出てくるので選択するのが結構大変です

・mvn site
pom.xmlをもとにプロジェクトの情報をHTML形式に吐き出してくれます
現在使用しているプラグイン読み込んでいるjarファイルの一覧等が確認できます

・mvn idea:idea
InteliJ形式のフォルダ構成に変換してくれる
InteliJからインポートすればコマンドで作成したプロジェクトをInteliJ上で開発できます
my-app.iml, my-app.ipr, my-app.iwsを作成してくれます

・mvn eclipse:eclipse
上記のeclipse版
.classpath, .projectを作成してくれます

■プラグインに関して
主なプラグインについて紹介します
デフォルトの状態でもメジャーなプラグインはすぐに使える状態にあります

・mvn jar:jar
target 配下にjarファイルを作成してくれます
http://maven.apache.org/plugins/maven-jar-plugin/

・mvn war:war
target 配下にwarファイルを作成してくれます
http://maven.apache.org/plugins/maven-war-plugin/

今回の場合通常のJavaプロジェクトでWebアプリ用のプロジェクトではないので失敗すると思います
具体的にはweb.xmlの定義に失敗するのですが、冒頭のプロジェクト作成時の
archetypeGroupIdをwebアプリ用で指定してプロジェクトを作成するとwarファイルの作成もうまくいきます
サンプルは以下の通りです
mvn archetype:generate -DarchetypeGroupId=maven-archetype-webapp -DgroupId=com.mycompany.web.app -DartifactId=my-web-app

他のarchetypeGroupId関しては以下を参照してみてください
http://maven.apache.org/guides/introduction/introduction-to-archetypes.html

■所感
mavenリポジトリがグローバルにアクセスできないと使えないのでグローバルに接続できる環境は必須
プロキシ等の環境の場合、pom.xmlを修正しないといけない等、若干ハードルが高くなる

■参考

0 件のコメント:

コメントを投稿