maven-war-plugin eclipse を使った環境別Warファイル生成

## 環境
- Java 8
- Eclipse (m2e,m2e-wtp)　動的Webプロジェクト
- Maven 3.3.9 (EMBEDDED)
- Tomcat 8.0.X

## 背景
Eclipse の Java プロジェクトで（ローカル・試験・本番）環境別の設定を Maven でビルドさせたい
手動でもできますが機能があるなら自動化したいということで・・・
[maven-war-plugin 公式サイト](https://maven.apache.org/plugins/maven-war-plugin/)等に例がありますが、ちょっと分かりづらいのですorz

## 設定ファイルの保存用ディレクトリを準備
下記のようなJavaリソースディレクトリ構成を作るとします
project/
　├ src/test/java
　├ src/test/resources
　├ src/main/java
　├ src/main/resources
　├ src/main/config/honban   &nbsp;&nbsp;<- 本番用
　├ src/main/config/local    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<- ローカル用
　├ src/main/config/test     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<- テスト用
　└ ライブラリー

## Eclipse の Java のビルドパス設定
上記で作ったディレクトリはビルド時に使うためで普段は src/main/resources のリソースを使うので　無効化設定をします

- プロジェクトを右クリック -> ビルドパス -> ビルドパスの構成　でダイアログを開きます

src/main/config/*** のフォルダ 
- インクルード：全て
- 除外：**

## 展開後の構成
project/
　├ META-INF/
　│ 　└ context.xml （対象）
　├ WEB-INF/
　│ 　├ classes/
　│ 　│ 　├ conf/
　│ 　│ 　│  　├ B.properties （対象）
　│ 　│ 　│  　└ C.properties
　│ 　│ 　└ A.properties （対象）
　│ 　├ lib/
　│ 　└ web.xml （対象）
　└ D.js （対象）

## 環境によって中身の異なるファイルを環境ごとに格納　
- A.properties (WEB-INF/classes/)
- B.properties (WEB-INF/classes/conf/)
- D.js (/)
- web.xml (WEB-INF/)
- context.xml (META-INF/)

（）内は展開後に入れる場所

## pom.xml プロパティ設定
```xml:pom.xml
	<properties>
		<wtp.version>none</wtp.version>
		<env.JAVA_HOME_8>C:\Program Files\Java\jdk1.8.0_151</env.JAVA_HOME_8>
		<maven.test.skip>true</maven.test.skip>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<properties>
```
とりあえず test をスキップさせたいのでスキップONにしています
エンコードは適宜変更してください

## maven-compiler-plugin 設定
```xml:pom.xml
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
					<executable>${env.JAVA_HOME_8}/bin/javac</executable>
					<encoding>UTF-8</encoding>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
```
\<build> の \<plugins> 内に記述

## maven-eclipse-plugin 設定
```xml:pom.xml
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.10</version>
				<configuration>
					<downloadSources>true</downloadSources>
					<wtpversion>${wtp.version}</wtpversion>
				</configuration>
			</plugin>
```
\<build> の \<plugins> 内に記述

## pom.xml プロフィール設定
```xml:pom.xml
	<profiles>
	    <profile>
	        <id>local</id>
	        <activation>
	            <activeByDefault>true</activeByDefault>
	        </activation>
	        <properties>
	            <environment>local</environment>
	        </properties>
	    </profile>
	    <profile>
	        <id>honban</id>
	        <properties>
	            <environment>honban</environment>
	        </properties>
	    </profile>
	    <profile>
	        <id>test</id>
	        <properties>
	            <environment>test</environment>
	        </properties>
	    </profile>
	</profiles>
```
\<project> の中に記載します
とりあえずデフォルトはローカルにしてみます

## pom.xml ビルドリソース設定
```xml:pom.xml
		<resources>
			<resource>
				<filtering>false</filtering>
				<directory>src/main/resources</directory>
				<excludes>
					<!-- These files should be excluded for environmental configuration -->
					<!-- 以下設定をすることでsrc/main/config/${environment}内からコピーされる -->
					<exclude>A.properties</exclude>
					<exclude>conf/B.properties</exclude>
				</excludes>
			</resource>
			<resource>
				<filtering>false</filtering>
				<directory>src/main/java</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<filtering>false</filtering>
				<directory>src/test/resources</directory>
			</testResource>
			<testResource>
				<filtering>false</filtering>
				<directory>src/test/java</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</testResource>
		</testResources>
```
\<build> の中に記載します

## maven-war-plugin 設定
```xml:pom.xml
			<plugin>
			    <groupId>org.apache.maven.plugins</groupId>
			    <artifactId>maven-war-plugin</artifactId>
			    <version>3.2.2</version>
	    		<configuration>
	    			<warSourceExcludes>**/A.properties,**/D.js,**/B.properties</warSourceExcludes>
	    			<!-- web.xml 設定 -->
	    			<webXml>src/main/config/${environment}/web.xml</webXml>
	    			<!-- context.xml 設定 -->
	    			<containerConfigXML>src/main/config/${environment}/context.xml</containerConfigXML>
	    			<webResources>
	    				<resource>
	    					<directory>src/main/config/${environment}</directory>
	    					<targetPath>/</targetPath>
	    					<includes>
	    						<include>D.js</include>
	    					</includes>
	    				</resource>
	    				<resource>
	    					<directory>src/main/config/${environment}</directory>
	    					<targetPath>WEB-INF/classes/</targetPath>
	    					<includes>
	    						<include>A.properties</include>
	    					</includes>
	    				</resource>
	    				<resource>
	    					<directory>src/main/config/${environment}</directory>
	    					<targetPath>WEB-INF/classes/conf/</targetPath>
	    					<includes>
	    						<include>B.properties</include>
	    					</includes>
	    				</resource>
	    			</webResources>
	    		</configuration>
			</plugin>
```
\<build> の \<plugins> 内に記述

## 実行 (例：テスト環境)
1. プロジェクトを右クリック -> 実行 -> Mavenビルド... を選択しダイアログを出します
2. 名前を適当につけます project package war -P test など
3. 「ゴール」に clean package 
4. 「プロファイル」に test
5. 実行！

```console:console
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.950 s
[INFO] Finished at: 2018-07-13T14:15:48+09:00
[INFO] Final Memory: 32M/427M
[INFO] ------------------------------------------------------------------------
```
出力ディレクトリに想定した構成でファイルが出来ていればOK！
デフォルトは workspace/project/target

考えたらローカルでのwarファイル作る必要ないかもねという落ちが…

以上です。お疲れ様でした。