3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-07-13

環境

  • 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 プロパティ設定

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 設定

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 設定

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 プロフィール設定

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 ビルドリソース設定

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 設定

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
[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ファイル作る必要ないかもねという落ちが…

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

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?