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の外部に専用のデータベースを用意することが一般的です。
その場合、システムプロパティでデータベースの接続情報を指定します。
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以外でも動作します。