maven---フレキシブル構築(一)
11873 ワード
内容を含める mavenプロパティ 構築環境の違い リソースフィルタ Maven Profile Webリソースフィルタ profileで統合テスト をアクティブ化小結 前言フレキシブル構築: プロジェクトには、開発環境、テスト環境、製品環境があります.これらの環境のデータベース・ライブラリの構成は異なります.プロジェクト構築時には、その環境を識別し、正しい構成を使用する必要があります. プロジェクトでは、多くの統合テストが開発されています.これらのテストは非常に時間がかかり、プロジェクトを構築するたびに実行するのに適していません.そのため、特定の時点でこれらの統合テストをアクティブにするには、いくつかの手段が必要です. mavenはどのように柔軟な構築を実現するか、3つの特性を内蔵しています: 属性 Profile リソースフィルタ 1.Mavenプロパティ mavenには6種類の属性があります: 内蔵属性 POM属性 カスタム属性 Settingsプロパティ Javaシステム属性 環境変数属性 1.1組み込み属性には、主に2つの一般的な組み込み属性 があります.
1.2 POM属性ユーザは、クラス属性を使用して、POMファイル内の対応する要素の値を参照することができる.例えば${project.artifactId}は要素の値に対応する. でよく使用されるPOM属性は、 を含む.これらの属性は、スーパーPOMで定義されたいくつかの属性のデフォルト値を持つPOM要素に対応しています.
1.3カスタム属性ユーザは、POMの要素の下でMaven属性をカスタマイズすることができる.例: その後、POMの他の場所で${my.prop}を使用するとhelloに置き換えられます.
1.4 SettingsプロパティはPOM属性と同じであり、ユーザはsettingsとして使用する.先頭の属性はsettingsを参照する.xmlファイルのXML要素の値(通常の${settings.localRepository}など)は、ユーザーのローカルウェアハウスのアドレスを指します.
1.5 Javaシステム属性 Javaシステムのすべてのプロパティは、${user.home}がユーザーディレクトリを指すなど、Mavenプロパティリファレンスを使用できます.mvn help:systemを使用して、Javaシステムのすべてのプロパティを表示できます.クエリーの結果は、記事の後に表示されます.
1.6環境変数属性すべての環境変数はenvとして使用することができる.先頭のMavenプロパティリファレンス.例えば${env.JAVA_HOME}はJAVA_を指すHOME環境変数の値.mvn help:systemを使用して、Javaシステムのすべてのプロパティを表示できます.
使用例マルチモジュールプロジェクトでは、モジュール間の依存性が一般的であり、これらのモジュールは通常同じgroupIdとversionを使用し、この場合POMプロパティを使用することができます. プラグインを構成するときも、同様にMavenプロパティを使用してプラグインの動作を簡単にカスタマイズできます.たとえば、maven-surefire-pluginプラグインの実行後のデフォルトのテストレポートディレクトリはtarget/surefire-reportsです.これは実際には${project.build.directory}/surefire-reportsです.プラグインドキュメントを問い合わせると、プラグインにはreportsDirectoryパラメータが用意されており、テストレポートディレクトリを構成していることがわかります.したがって、target/test-reportsに変更するなど、テストレポートディレクトリを変更するには、次のコードを使用します: .
2.構築環境の違い異なる環境では、プロジェクトのソースコードは異なる方法で構築されるべきである.たとえば、開発環境ではデータベース構成のセットを使用することができます.
オンライン環境では、別のデータベース構成が使用される場合があります.と同様に、キャッシュの構成、他のアプリケーションに対するRFCリンクは、異なる本番環境で異なる構成を有する可能性がある. では、異なる環境での構築の違いについて、プロジェクトが異なる環境で正しく所望に従って構築されることを保証するには、構築ツールとしてどのように実現しますか? 実現構想:開発、テストなどの異なる環境に対して複数のパラメータを定義し、システムのプロファイルでパラメータを通じて参照する.プロジェクト構築時にこれらのプロファイルをブロックし、パラメータ使用値を置換するが、異なる環境に複数のパラメータを配置しているため、どのグループを置換するかは一定の方法(コマンドライン、settingsファイル、システム属性など)で示す必要がある.これにより,異なる環境で特定の構築を行うことができる. このためにしなければならないことは、いくつかのことに関連しています.異なる環境の複数のプロパティのグループを定義します.2.システムリソースファイルでプロパティ名を使用して構成し、後で本当に必要な値に置き換えます.3.プロジェクトを構築するときに使用する属性のセットを指定します.4.システムで属性名を使用して構成されているリソースファイルをブロックし、リソースファイルの属性名を定義された属性値で置き換えます. 以下では、データベース情報を柔軟に構成することにより具体的に説明する.
3.リソースフィルタ
3.1需要事例データベースの構成では、一般的にsrc/main/resourcesディレクトリの下にデータベースのプロファイルjdbcを追加します.propertiesファイル.接続データベースで使用されるドライバクラス、URL、ユーザー名、パスワードが変更される可能性があるため、Mavenプロパティで置き換えられます.
3.2実装手順
3.2.1. jdbc.propertiesファイルでのプロパティの使用ここでは4つのMaven属性、dbを使用する.driver、db.urlなど、それらのネーミングは任意で、状況に応じて適切な名前を選択します.
3.2.2.POMでのprofile定義プロパティの定義
Mavenプロパティが使用されている以上、カスタムmavenプロパティを説明した場所で定義する必要があります.これらのプロパティは主に異なる開発環境に適応するために使用されているので、mavenはprofileを提供して異なるプロパティを分類することができます.ここではprofileで包む必要があり、profileはPOMで定義されています.
3.3.3 maven-resources-pluginプラグインオープンリソースフィルタの構成には属性定義があり、プロファイルでもこれらの属性が使用されていますが、POMでのみ使用できます.たとえば、POMで${db.username}を使用して構築する場合、その値はdevになりますが、src/main/resources/ディレクトリの下にあるファイルに置くとjdbc.propertiesでは、構築時も${db.username}です.したがって、リソースファイルのMavenプロパティをMavenに解析させます. リソースファイルの処理は、実はmaven-resources-pluginが行うことです.デフォルトの動作は、プロジェクトのプライマリリソースファイルをプライマリコードコンパイル出力ディレクトリ(target/classes)にコピーし、テストリソースファイルをテストコードコンパイル出力ディレクトリにコピーします.このプラグインがリソースファイルのMaven属性を解析できるようにするには、リソースフィルタをオンにする必要があります.フィルタされたファイルMavenは、Mavenプロパティを対応する値に置き換えます. メインリソースディレクトリとテストリソースディレクトリはフィルタをオンにします.
3.3.4プロファイルのアクティブ化すべての準備が整い、最後にコマンドラインでprofileをアクティブにすれば、mavenはプロジェクトを構築するときにprofileの属性値を使用してデータベースプロファイルの属性参照を置き換えることができます. コマンド: -Pパラメータは、コマンドラインでprofileをアクティブにすることを示します.ここではidがdevのprofile(複数のid間をカンマで区切る)がアクティブになります.構築が完了すると、出力ディレクトリのデータベース構成が開発環境の構成になります:
次のセクション Maven Profile:profileのより多くのアクティブ化方法、異なる種類(pom.xmlだけで定義できるわけではありませんよ、定義位置によって作用範囲が異なります)、profileで使用できる要素など. Webリソースフィルタリング:一般リソースファイル(src/main/resources)のほか、webにはwebリソースファイル(src/main/webapp)が含まれていますが、webリソースファイルのフィルタリングはどうなっていますか?(まずwebリソースファイルを処理するプラグインはmaven-resources-pluginではないので、resourcesを構成するときは役に立ちません.) profileで統合テストをアクティブ化する:1つのプロジェクトにはユニットテストも統合テストもあり、ユニットテストの実行が速いため、プロジェクトの構築が速く、統合テストの実行に時間がかかるので、構築のたびに統合テストを実行したくない場合はどうすればいいですか? mvn help:systemで表示されるjavaシステムプロパティ(システム環境変数が貼り付けられていない)
参考記事:Maven学習ノート(十一):柔軟な構築
${basedir} , pom.xml
${version}
1.2 POM属性
${project.build.sourceDirectory}: , src/main/java/。
${project.build.testSourceDirectory}: , src/test/java/。
${project.build.directory}: , target/。
${project.outputDirectory}: , target/classes/。
${project.testOutputDirectory}: , target/test-classes/。
${project.groupId}: groupId。
${project.artifactId}: artifactId。
${project.version}: version。
${project.build.finalName}: , ${project.artifactId}-${project.version}。
1.6
UTF-8
1.3カスタム属性
...
hello
...
1.4 Settingsプロパティ
1.5 Javaシステム属性
1.6環境変数属性
使用例
${project.groupId}
account-email
${project.version}
${project.groupId}
account-persist
${project.version}
org.apache.maven.plugins
maven-surefire-plugin
2.19
false
${project.build.directory}/test-reports
2.構築環境の違い
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/iqasdb?useUnicode=true&characterEncoding=UTF-8
jdbc.user=dev
jdbc.password=dev-pwd
オンライン環境では、別のデータベース構成が使用される場合があります.
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://172.19.201.168:3306/iqasdb?useUnicode=true&characterEncoding=UTF-8
jdbc.user=test
jdbc.password=test-pwd
3.リソースフィルタ
3.1需要事例
3.2実装手順
3.2.1. jdbc.propertiesファイルでのプロパティの使用
jdbc.driverClass=${db.driver}
jdbc.jdbcUrl=${db.url}
jdbc.user=${db.username}
jdbc.password=${db.username}
3.2.2.POMでのprofile定義プロパティの定義
Mavenプロパティが使用されている以上、カスタムmavenプロパティを説明した場所で定義する必要があります.これらのプロパティは主に異なる開発環境に適応するために使用されているので、mavenはprofileを提供して異なるプロパティを分類することができます.ここではprofileで包む必要があり、profileはPOMで定義されています.
dev
com.mysql.jdbc.Driver
jdbc:mysql://172.19.201.168:3306/iqasdb?useUnicode=true&characterEncoding=UTF-8
dev
dev-pwd
3.3.3 maven-resources-pluginプラグインオープンリソースフィルタの構成
${basedir}/src/main/resources
true
${basedir}/src/test/resources
true
3.3.4プロファイルのアクティブ化
mvn clean install -Pdev
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/iqasdb?useUnicode=true&characterEncoding=UTF-8
jdbc.user=dev
jdbc.password=dev-pwd
次のセクション
===============================================================================
========================= Platform Properties Details =========================
===============================================================================
===============================================================================
System Properties
===============================================================================
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\Soft\Java\jdk1.8.0_65\jre\bin
java.vm.version=25.65-b01
maven.multiModuleProjectDirectory=C:\Users\dell
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
guice.disable.misplaced.annotation.check=true
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.country=CN
user.script=
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 1
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\Users\dell
java.runtime.version=1.8.0_65-b17
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\Soft\Java\jdk1.8.0_65\jre\lib\endorsed
os.arch=amd64
java.io.tmpdir=C:\Users\dell\AppData\Local\Temp\
line.separator=
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 7
classworlds.conf=D:\Soft\maven\apache-maven-3.3.3\bin\m2.conf
sun.jnu.encoding=GBK
java.library.path=D:\Soft\Java\jdk1.8.0_65\bin;C:\Windows\Sun\Java\bin;C:\Window
s\system32;C:\Windows;D:\Soft\Spring-Boot-CLI\bin;D:\Soft
exus-3.1.0-04-win64
exus-3.1.0-04\bin;D:\Soft\maven\apache-maven-3.3.3\bin;D:\Soft\Java\jdk1.8.0_65\
bin;D:\Soft\Java\jdk1.8.0_65\jre\bin;C:\ProgramData\Oracle\Java\javapath;C:\Prog
ram Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Window
s\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerS
hell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Fil
es\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(
R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Manage
ment Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engi
ne Components\IPT;D:\Soft\VanDyke Software\Clients\;D:\Soft\git\Git\bin;D:\Soft\
mysql\installationpath\MySQL Server 5.5\bin;.
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.1
user.home=C:\Users\dell
user.timezone=Asia/Shanghai
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=GBK
java.specification.version=1.8
java.class.path=D:\Soft\maven\apache-maven-3.3.3\boot\plexus-classworlds-2.5.2.j
ar
user.name=dell
java.vm.specification.version=1.8
sun.java.command=org.codehaus.plexus.classworlds.launcher.Launcher help:system
java.home=D:\Soft\Java\jdk1.8.0_65\jre
sun.arch.data.model=64
user.language=zh
java.specification.vendor=Oracle Corporation
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_65
java.ext.dirs=D:\Soft\Java\jdk1.8.0_65\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
sun.boot.class.path=D:\Soft\Java\jdk1.8.0_65\jre\lib\resources.jar;D:\Soft\Java\
jdk1.8.0_65\jre\lib\rt.jar;D:\Soft\Java\jdk1.8.0_65\jre\lib\sunrsasign.jar;D:\So
ft\Java\jdk1.8.0_65\jre\lib\jsse.jar;D:\Soft\Java\jdk1.8.0_65\jre\lib\jce.jar;D:
\Soft\Java\jdk1.8.0_65\jre\lib\charsets.jar;D:\Soft\Java\jdk1.8.0_65\jre\lib\jfr
.jar;D:\Soft\Java\jdk1.8.0_65\jre\classes
java.vendor=Oracle Corporation
sun.stderr.encoding=ms936
maven.home=D:\Soft\maven\apache-maven-3.3.3
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.stdout.encoding=ms936
sun.desktop=windows
sun.cpu.isalist=amd64
参考記事:Maven学習ノート(十一):柔軟な構築