Maven 3実戦ノート13 Maven Profileカスタマイズ構築


詳細
1.  前言
私たちが開発したソフトウェアには異なる環境がある場合があります.開発段階は開発環境です.つまり、私たちの研究開発者が普段使っている環境です.多くの人が開発しているのはWindowsの下でしょう.少数の人は開発環境さえLinuxやUnixの下で行う必要があります.Java自身のプラットフォーム間性はどのオペレーティングシステムの下で開発するかは大きく異なる可能性があります.JavaがC/C++を呼び出して特定のサービスを実行する場合、C/C++人員開発が必要な場合は、生産環境と同様にLinux(しかもバージョンが一致)で研究開発を行うことが望ましい.開発が一定の段階に達した後によくあちらのTeamの加入をテストして、機能テスト、圧力テストなどは1セットのテスト環境を必要として、よくテスト環境も多くの情況に分けて、機能テスト環境は比較的に開発環境に接近して、圧力テスト環境は往々にして生産環境に接近して、甚だしきに至っては生産環境です.このような多くの環境に直面して、以前は手動で構成し、異なる環境で異なる構成値を与えていた可能性があります.手動構成は、エラーが発生し、効率が低いなどの問題に直面しています.
MavenのProfile構成を使用すると、pom.xml構成を統一的にカスタマイズすることで異なる環境に適応できるように、プロジェクトの構築を柔軟に行うことができます.これにより、ソフトウェアの歪みと適応性が向上します.
2.  マスクコンストラクションの違い
筆者は、以前の永続層モジュールに基づいて、データベースが開発環境とテスト環境で異なる場合、どうすればいいのか、一般的にはプロファイルpropertiesにデータベース情報を書きます.
db.propertiesの内容は以下の通りです.
db.Driver=${db.Driver}
db.url=${db.url}
db.user=${db.user}
db.password=${db.password}
 
おかしいかもしれませんが、ここは具体的な構成値ですね.そうですね.構成値はpom.xmlにあります.
pom.xmlフラグメントは以下の通りです.

	4.0.0
	MavenAccount-persist
	jar
	MavenAccount-persist

	
		com.liuyan.account
		MavenAccount-aggregator
		0.0.1-SNAPSHOT
		../MavenAccount-aggregator/pom.xml
	

	
	………………    
	

	
		
			
				${project.basedir}/src/main/resource
				true
			
		
	

	
		
			test1
			
				
					env
					dev1
				
			
			
				org.gjt.mm.mysql.Driver
				jdbc:mysql://localhost:3306/uxian99
				liuyan
				111111
			
		
		
			test2
			
				
					env
					dev2
				
			
			
				com.mysql.jdbc.Driver
				jdbc:mysql://192.168.1.109:3306/uxian99
				dba
				dba
			
		
	

 赤い構成部分はリソースプロファイルのフィルタリングを表し、すべてのリソースファイルがMaven構築コマンドを実行するとき、pomの様々な情報はプロファイルの内容と密接に関係しており、プロファイルにpomコンテンツを感知させる必要があります.
青色部分はカスタマイズされたprifile属性情報であり,そのうち2つのパーソナライズされた構成情報が配置されている.test 1とtest 2.activationラベルは、この特性をアクティブにする構成を表し、ここでアクティブにするとは、そのパーソナライズされた構成を有効にするという意味です.
Javaクラスの簡単な読み取りプロファイルを書きます
package util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ReadConfig {

	public static String read() throws IOException {
		InputStream in = ClassLoader.getSystemResourceAsStream("db.properties");
		Properties p = new Properties();
		p.load(in);
		String dbDriver = (String) p.get("db.Driver");
		String dburl = (String) p.get("db.url");
		String dbuser = (String) p.get("db.user");
		String dbpassword = (String) p.get("db.password");
		
		System.out.println(dbDriver);
		System.out.println(dburl);
		System.out.println(dbuser);
		System.out.println(dbpassword);
		return dbpassword;
		
	}

}

 その後、書き込みユニットのテスト
package util;

import static org.junit.Assert.assertTrue;

import java.io.IOException;

import org.junit.Test;

public class ReadConfigTest {

	@Test
	public void testGenerateText() throws IOException {
		String password = ReadConfig.read();
		System.out.println(password);
		assertTrue(password.equals("dba"));
	}

}

 コードは簡単です.次にコンソールに次のコマンドを入力してみましょう.
mvn clean package –Ptest2

 コンソール出力結果は次のとおりです.
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running util.ReadConfigTest
com.mysql.jdbc.Driver
jdbc:mysql://192.168.1.109:3306/uxian99
dba
dba
dba
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.078 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

 ユニットテストの例の結果はtest 2の構成情報であり、構築された構成ファイルの内容は以下のdb.propertiesである.
db.Driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.109:3306/uxian99
db.user=dba
db.password=dba

 構築されたプロファイルの内容は、${db.Driver}という一時変数情報ではなく、pomファイルに置き換えられた実際の構成値であることがわかります.
コードを変更せずに、コンソールに次のように入力します.
mvn clean package -Denv=dev1

 結果はprofileのtest 1特性がアクティブ化され、テスト結果が予想と一致しなかったことを以下に示す.プロファイルをアクティブにするには、指定した構成パラメータ方式、システム属性=特定の値が表示される2つの方法があります.また、デフォルト情報は、ユーザーレベルsetting.xmlまたはグローバルレベルsetting.xmlファイルで構成されます.しかし、この方法はあまり賛成していません.この情報が構成されていることは、自分のローカル環境でしか正しく対応できないことを意味します.プロジェクトはパッケージ化され、パブリッシュ後に自分のpomファイルに保存されません.他の人が構築したときにエラーが発生する可能性があります.したがって、プロジェクトレベルのpom.xmlに関連するカスタマイズ情報をできるだけ構成します.
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running util.ReadConfigTest
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost:3306/uxian99
liuyan
111111
111111
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.062 sec <<< FA
ILURE!

Results :

Failed tests:
  testGenerateText(util.ReadConfigTest)

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

 
3.  まとめ
Profileは輪郭です.外形外観;イメージ;側面(像)、側面影という意味で、個性的な配置と呼ぶほうがいいと思います.パーソナライズされた構成は、Webプロジェクトのリソースをフィルタリングし、テストを統合することもできます.ネット上に関連する資源があるので、まとめません.多くのアプリケーションは、パーソナライズされた構築の違いを遮断します.