maven---フレキシブル構築(一)

11873 ワード

内容を含める
  • mavenプロパティ
  • 構築環境の違い
  • リソースフィルタ
  • Maven Profile
  • Webリソースフィルタ
  • profileで統合テスト
  • をアクティブ化
  • 小結
  • 前言
  • フレキシブル構築:
  • プロジェクトには、開発環境、テスト環境、製品環境があります.これらの環境のデータベース・ライブラリの構成は異なります.プロジェクト構築時には、その環境を識別し、正しい構成を使用する必要があります.
  • プロジェクトでは、多くの統合テストが開発されています.これらのテストは非常に時間がかかり、プロジェクトを構築するたびに実行するのに適していません.そのため、特定の時点でこれらの統合テストをアクティブにするには、いくつかの手段が必要です.
  • mavenはどのように柔軟な構築を実現するか、3つの特性を内蔵しています:
  • 属性
  • Profile
  • リソースフィルタ
  • 1.Mavenプロパティ
  • mavenには6種類の属性があります:
  • 内蔵属性
  • POM属性
  • カスタム属性
  • Settingsプロパティ
  • Javaシステム属性
  • 環境変数属性
  • 1.1組み込み属性
  • には、主に2つの一般的な組み込み属性
  • があります.
     ${basedir}       ,   pom.xml     
      ${version}      
    

    1.2 POM属性
  • ユーザは、クラス属性を使用して、POMファイル内の対応する要素の値を参照することができる.例えば${project.artifactId}は要素の値に対応する.
  • でよく使用される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
    
  • これらの属性は、スーパーPOMで定義されたいくつかの属性のデフォルト値を持つPOM要素に対応しています.

  • 1.3カスタム属性
  • ユーザは、POMの要素の下でMaven属性をカスタマイズすることができる.例:
  • 
        ...
         
              hello
         
         ...
    
    
  • その後、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プロパティを使用することができます.
  • 
        
            ${project.groupId}
            account-email
            ${project.version}
          
        
            ${project.groupId}
            account-persist
            ${project.version}
          
    
    
  • プラグインを構成するときも、同様にMavenプロパティを使用してプラグインの動作を簡単にカスタマイズできます.たとえば、maven-surefire-pluginプラグインの実行後のデフォルトのテストレポートディレクトリはtarget/surefire-reportsです.これは実際には${project.build.directory}/surefire-reportsです.プラグインドキュメントを問い合わせると、プラグインにはreportsDirectoryパラメータが用意されており、テストレポートディレクトリを構成していることがわかります.したがって、target/test-reportsに変更するなど、テストレポートディレクトリを変更するには、次のコードを使用します:
  • .
     
              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
    
  • と同様に、キャッシュの構成、他のアプリケーションに対するRFCリンクは、異なる本番環境で異なる構成を有する可能性がある.
  • では、異なる環境での構築の違いについて、プロジェクトが異なる環境で正しく所望に従って構築されることを保証するには、構築ツールとしてどのように実現しますか?
  • 実現構想:開発、テストなどの異なる環境に対して複数のパラメータを定義し、システムのプロファイルでパラメータを通じて参照する.プロジェクト構築時にこれらのプロファイルをブロックし、パラメータ使用値を置換するが、異なる環境に複数のパラメータを配置しているため、どのグループを置換するかは一定の方法(コマンドライン、settingsファイル、システム属性など)で示す必要がある.これにより,異なる環境で特定の構築を行うことができる.
  • このためにしなければならないことは、いくつかのことに関連しています.異なる環境の複数のプロパティのグループを定義します.2.システムリソースファイルでプロパティ名を使用して構成し、後で本当に必要な値に置き換えます.3.プロジェクトを構築するときに使用する属性のセットを指定します.4.システムで属性名を使用して構成されているリソースファイルをブロックし、リソースファイルの属性名を定義された属性値で置き換えます.
  • 以下では、データベース情報を柔軟に構成することにより具体的に説明する.

  • 3.リソースフィルタ
    3.1需要事例
  • データベースの構成では、一般的にsrc/main/resourcesディレクトリの下にデータベースのプロファイルjdbcを追加します.propertiesファイル.接続データベースで使用されるドライバクラス、URL、ユーザー名、パスワードが変更される可能性があるため、Mavenプロパティで置き換えられます.

  • 3.2実装手順
    3.2.1. jdbc.propertiesファイルでのプロパティの使用
    jdbc.driverClass=${db.driver}
    jdbc.jdbcUrl=${db.url}
    jdbc.user=${db.username}
    jdbc.password=${db.username}
    
  • ここでは4つのMaven属性、dbを使用する.driver、db.urlなど、それらのネーミングは任意で、状況に応じて適切な名前を選択します.

  • 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プラグインオープンリソースフィルタの構成
  • には属性定義があり、プロファイルでもこれらの属性が使用されていますが、POMでのみ使用できます.たとえば、POMで${db.username}を使用して構築する場合、その値はdevになりますが、src/main/resources/ディレクトリの下にあるファイルに置くとjdbc.propertiesでは、構築時も${db.username}です.したがって、リソースファイルのMavenプロパティをMavenに解析させます.
  • リソースファイルの処理は、実はmaven-resources-pluginが行うことです.デフォルトの動作は、プロジェクトのプライマリリソースファイルをプライマリコードコンパイル出力ディレクトリ(target/classes)にコピーし、テストリソースファイルをテストコードコンパイル出力ディレクトリにコピーします.このプラグインがリソースファイルのMaven属性を解析できるようにするには、リソースフィルタをオンにする必要があります.フィルタされたファイルMavenは、Mavenプロパティを対応する値に置き換えます.
  • メインリソースディレクトリとテストリソースディレクトリはフィルタをオンにします.
  •   
              
                  
                    ${basedir}/src/main/resources  
                    true  
                  
              
              
                  
                    ${basedir}/src/test/resources  
                    true  
                  
              
    
       
    

    3.3.4プロファイルのアクティブ化
  • すべての準備が整い、最後にコマンドラインでprofileをアクティブにすれば、mavenはプロジェクトを構築するときにprofileの属性値を使用してデータベースプロファイルの属性参照を置き換えることができます.
  • コマンド:mvn clean install -Pdev
  • -Pパラメータは、コマンドラインでprofileをアクティブにすることを示します.ここではidがdevのprofile(複数のid間をカンマで区切る)がアクティブになります.構築が完了すると、出力ディレクトリのデータベース構成が開発環境の構成になります:
  • 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
    

    次のセクション
  • 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システムプロパティ(システム環境変数が貼り付けられていない)
  • ===============================================================================
    ========================= 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学習ノート(十一):柔軟な構築