Maven
spring
SonarQube
TERASOLUNA5

TERASOLUNA5.xで覚えるべきMavenコマンド

1. はじめに

TERASOLUNA Server Framework for Java (5.x) ではビルドツールとしてMavenを利用します。今回はTERASOLUNA5.xのWebアプリ開発でよく利用する、覚えるべきMavenコマンドについて説明します。
なお、Mavenのインストール方法については「WindowsにMaven(Proxy経由/NEXUS経由)をインストールする方法」を参照ください。

1.1. 検証環境

  • Java 1.8.0_131
  • TERASOLUNA Server Framework for Java 5.3.0
  • Apache Maven 3.3.9
  • SonarQube 4.5.2

1.2. 覚えるべきMavenコマンド

項番 やりたいこと Mavenコマンド 実行プロジェクト
1 ビルドする mvn package 親プロジェクト
2 テストをスキップしてビルドする mvn package -Dmaven.test.skip=true 親プロジェクト
3 javadocを出力する mvn javadoc:javadoc domainプロジェクト
4 JUnitテストを実行する mvn test 親プロジェクト
5 Sonarによる静的ソースコード解析を実行する mvn sonar:sonar 親プロジェクト

1.3. プロジェクト構成

今回は「TERASOLUNA5.xのブランクプロジェクトをPostgreSQL対応に変更する方法」で作成したプロジェクトを利用して説明したいと思います。

説明で利用するプロジェクト構成
C:\work
    └─demo-database-postgresql               // 親プロジェクト
        ├─demo-database-postgresql-domain    // domainプロジェクト
        ├─demo-database-postgresql-env       // envプロジェクト
        ├─demo-database-postgresql-initdb    // initdbプロジェクト
        ├─demo-database-postgresql-selenium  // seleniumプロジェクト
        ├─demo-database-postgresql-web       // webプロジェクト
        └─pom.xml                            // 親pom

2. ビルドする

Javaファイルをコンパイルしてclassファイルを生成した後、jarファイルやwarファイルを作成することをビルドと呼びます。
TERASOLUNA5.xでは親プロジェクトでmvn packageコマンドを実行することでビルドを行います。

ビルドの実行結果
C:\work\demo-database-postgresql>mvn package
[INFO] Scanning for projects...

...省略...

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) Web Blank Multi Project (MyBatis3) SUCCESS [  0.016 s]
[INFO] demo-database-postgresql-env ....................... SUCCESS [  1.700 s]
[INFO] demo-database-postgresql-domain .................... SUCCESS [  0.375 s]
[INFO] demo-database-postgresql-web ....................... SUCCESS [  2.199 s]
[INFO] demo-database-postgresql-initdb .................... SUCCESS [  0.032 s]
[INFO] demo-database-postgresql-selenium .................. SUCCESS [  0.327 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.179 s
[INFO] Finished at: 2017-09-04T18:59:36+09:00
[INFO] Final Memory: 22M/54M
[INFO] ------------------------------------------------------------------------

C:\work\demo-database-postgresql>

3. テストをスキップしてビルドする

Mavenのビルド処理では、JUnitテストクラスがsrc/testディレクトリに含まれていた場合にこのテストを実行します。
テストを実行しないようにするにはmaven.test.skip=trueシステムプロパティを設定します。

テストをスキップするビルドのコマンド
mvn package -Dmaven.test.skip=true

4. javadocを出力する

javadocを出力したい場合、mvn javadoc:javadocコマンドを実行します。
デフォルトではdomainプロジェクトでjavadocを出力することができます。
webプロジェクトでもjavadocを出力したい場合は、プロジェクトの依存関係のエラーが出るので対応する必要があります。

C:\work\demo-database-postgresql\demo-database-postgresql-domain>mvn javadoc:javadoc
[INFO] Scanning for projects...
...省略...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.388 s
[INFO] Finished at: 2017-09-04T20:13:24+09:00
[INFO] Final Memory: 16M/39M
[INFO] ------------------------------------------------------------------------

C:\work\demo-database-postgresql\demo-database-postgresql-domain>

生成されたjavadocはdomainプロジェクト/site/apidocs/index.htmlで確認することができます。

5. JUnitテストを実行する

前述でMavenによるビルド処理でJUnitテストクラスのテストが実行されることを説明しました。
JUnitテストのみを実行したい場合、mvn testコマンドで実行することができます。

デフォルトでは親プロジェクトでJUnitテストを実行することができます。
javadoc同様、webプロジェクトのみやdomainプロジェクトのみ実行したい場合、依存関係のエラーが出るので対応する必要があります。

C:\work\demo-database-postgresql>mvn test
[INFO] Scanning for projects...
...省略...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
...省略...
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.183 sec

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
...省略...

C:\work\demo-database-postgresql>

6. Sonarによる静的ソースコード解析を実行する

sonar による静的ソースコード解析を実行する場合、mvn sonar:sonarコマンドで行います。
なお、このコマンドを実行するには、事前にSonarサーバを起動させておく必要があります。

C:\work\demo-database-postgresql>mvn sonar:sonar
[INFO] Scanning for projects...
...省略...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) Web Blank Multi Project (MyBatis3) [ 24.196 s]
[INFO] demo-database-postgresql-env ....................... SKIPPED
[INFO] demo-database-postgresql-domain .................... SKIPPED
[INFO] demo-database-postgresql-web ....................... SKIPPED
[INFO] demo-database-postgresql-initdb .................... SKIPPED
[INFO] demo-database-postgresql-selenium .................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25.039 s
[INFO] Finished at: 2017-09-04T21:39:37+09:00
[INFO] Final Memory: 39M/172M
[INFO] ------------------------------------------------------------------------

C:\work\demo-database-postgresql>

Sonarにはデモ用にインメモリデータベースであるh2dbが組み込まれています。
実際のシステム開発では、静的ソースコード解析の結果を保持し続けるため、Sonarの外部に専用のデータベースを用意することが一般的です。
その場合、システムプロパティでデータベースの接続情報を指定します。

Sonar組み込みのh2dbではなく、PostgreSQLを利用する場合
mvn sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.jdbc.url=jdbc:postgresql://localhost:5432/sonardb -Dsonar.jdbc.username=sonarUser -Dsonar.jdbc.password=sonarPass
項番 システムプロパティ 備考
1 sonar.host.url localhost:9000 sonarサーバのURL
2 sonar.jdbc.url jdbc:postgresql://localhost:5432/sonardb sonarの解析結果を格納するDB
ここではPostgreSQLを利用し、sonardbというデータベースを指定している
3 sonar.jdbc.username sonarUser 2のdbに接続する際のユーザID
4 sonar.jdbc.password sonarPass 2のdbに接続する際のユーザのパスワード

7. さいごに

今回はTEARSOLUNA5.xのWebアプリの開発でよく利用するMavenコマンドについて説明しました。ここで説明した内容(ビルド、javadocの出力、JUnitの実行等)はJavaにおけるシステム開発では頻繁に利用するものばかりかと思います。

コマンドで実行できるということは、Jenkins等のCIサーバで実行できることを意味します。なるべくCIに組み込んで自動的に実行されるようにしましょう。

なお、ここで説明しているMavenコマンドは一般的なもののため、Mavenプロジェクトの設定がしっかりされていればTEASOLUNA5.x以外でも動作します。