環境
- Java 8
- Eclipse (m2e,m2e-wtp) 動的Webプロジェクト
- Maven 3.3.9 (EMBEDDED)
- Tomcat 8.0.X
背景
Eclipse の Java プロジェクトで(ローカル・試験・本番)環境別の設定を Maven でビルドさせたい
手動でもできますが機能があるなら自動化したいということで・・・
maven-war-plugin 公式サイト等に例がありますが、ちょっと分かりづらいのですorz
設定ファイルの保存用ディレクトリを準備
下記のようなJavaリソースディレクトリ構成を作るとします
project/
├ src/test/java
├ src/test/resources
├ src/main/java
├ src/main/resources
├ src/main/config/honban <- 本番用
├ src/main/config/local <- ローカル用
├ src/main/config/test <- テスト用
└ ライブラリー
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 プロパティ設定
<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 設定
<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 設定
<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 プロフィール設定
<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 ビルドリソース設定
<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 設定
<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> 内に記述
実行 (例:テスト環境)
- プロジェクトを右クリック -> 実行 -> Mavenビルド... を選択しダイアログを出します
- 名前を適当につけます project package war -P test など
- 「ゴール」に clean package
- 「プロファイル」に test
- 実行!
[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ファイル作る必要ないかもねという落ちが…
以上です。お疲れ様でした。