2013-04-29 2 views
5

Mavenを使用して、異なるローカルおよびテスト領域のアーティファクト生成を処理したいと考えています。私は異なるプロファイルを使用することができると信じていますが、私は確信していません。Mavenとさまざまなapplication.propertiesを使用して、Spring構成のアプリケーションで異なるテスト領域のアーティファクトを生成する方法

Mavenでは、パッケージ化に使用するファイル(application.propertiesなど)を選択するために、別のディレクトリを選択できますか?どうすればそれを設定できますか?

は、私が何をしたいのアイデアは

  • ビルドサーバー
  • DEV
  • SYS

    • 地元の私のプロジェクト
    • PROD内のリソースのための以下のフォルダを持つことである

    各フォルダにはdiffereが含まれている必要がありますntバージョンのapplication.resourcesは、変数で使用するためにハードコードされた文字列を処理するために使用できるSpringのファイルです。ローカルビルドの場合、開発者は異なるオペレーティングシステムでも動作します。私はそれを別のOSでもシームレスにしたいと思っています。

    主な成果は次のようになります。

    • コントロールMaven lifecycle phases IDE(IntelliJの)
    • 内部からのフェーズを複雑にし、チームが
    • 各開発者
    • ための一貫したは異なる構成を作るようなものにしてくださいを処理していません開発者/地域ごとに、フェーズ実行時に見えないように見えるインストール

    理想的には私のプロジェクトはbest practices (Duvall, Matyas, Glover)に従って設定します。

  • +1

    使用Mavenのプロファイル(http://maven.apache.org/guides/introduction/introduction-to-profiles.html)とリソースのフィルタリングます(http:// Mavenを次のようにこのファイルを作成することができます。 apache.org/plugins/maven-resources-plugin/examples/filter.html) – willome

    答えて

    4

    現在のところ、異なるフォルダではなく異なるプロパティを提供しています。私たちは、

  • Mavenの相が生成する

    • SpringのPropertyPlaceholderConfigurer
    • Mavenのプロファイル(私たちはDevの環境を構築するために使用して何か)、
    • ビルドサーバー(当社の場合はチームシティー)のミックスを経て、この を行います正しいアーティファクト
    • 起動と引数を構築

    我々は何をすべきかの私の理解では、lでありますしかし、うまくいけば、これは他人のための有用な例として役立つかもしれないし、おそらく私自身が考えているかもしれない。

    以下に示すように、さまざまなプロパティファイルを指定するためのパラメータを用意しています。 各プロパティファイルには、地域/環境の設定があります。現在の使用方法を説明します。 できるだけ早く他の人に使用することができます。

    Mavenプロファイルを使用するにはenvという地域設定プロパティを含むdevelopmentと表示されたprofileが作成されています。私はまだ完全にそのプロジェクトでどのように使用されているのかまだ分かりませんが、POMにはMavenコンパイラプラグインとMaven Tomcatプラグインが含まれています。

    デベロッパーとしては、IntelliJ からTomcatでアプリケーションをローカルに実行し、envプロパティを提供します。起動時にenvプロパティは の引数としてclasspath*:dev-common.propertiesに設定されています。 このファイルはプロパティ設定ファイルで、異なる 地域のプレースホルダ値を設定します。

    envの値が例1当社PropertyPlaceholderConfigurer


    に利用できるようになる - のpom.xmlでのMavenのprofileの実装:

    たちのポンポンでprofileの実装は次のとおりです。

    <profile> 
         <id>development</id> 
         <activation> 
          <property> 
           <name>env</name> 
           <value>development</value> 
          </property> 
         </activation> 
         <build> 
          <pluginManagement> 
           <plugins> 
            <plugin> 
             <artifactId>maven-compiler-plugin</artifactId> 
             <version>2.3.2</version> 
             <configuration> 
              <source>1.6</source> 
              <target>1.6</target> 
             </configuration> 
            </plugin> 
            <plugin> 
             <groupId>org.apache.tomcat.maven</groupId> 
             <artifactId>tomcat7-maven-plugin</artifactId> 
             <version>2.0-SNAPSHOT</version> 
          ... 
            </plugin> 
           </plugins> 
          </pluginManagement> 
         </build> 
        </profile> 
    

    例2 - 通常のビルドのプロパティプレースホルダ構成器:

    我々はまた、使用のOFAのSpringコンポーネント、PropertyPlaceholderConfigurerを作ります。これをビルド引数と組み合わせて使用​​して、クラスパスポインタをリソースファイルに設定します。

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="locations"> 
         <list> 
          <value> 
           ${env} 
          </value> 
         </list> 
        </property> 
    


    例3 - テストのプロパティプレースホルダ構成器:

    私たちは春のコンテキストは、具体的にもPropertyPlaceholderConfigurerを使用して統合テスト用にセットアップされています。これらは、@ContextConfiguration(locations = {"classpath:test-dataexchange-application-context.xml"})@RunWith(SpringJUnit4ClassRunner.class)の組み合わせを使用して統合テストクラスによって取得されます。

    <bean id="testpropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="locations"> 
         <list> 
          <value>classpath*:dev-local-common.properties</value> 
         </list> 
        </property> 
    


    その他の注意事項:統合テスト領域の性質を拾うために、次のように我々はPropertyPlaceholderConfigurerを設定テストコンテキスト

    を我々チームマネジメントのためにチームシティを利用するが、私はこれらの設定がどのようになっているのか見ていない。それらがまったく存在する場合は、が使用されます。上記のアプローチを組み合わせて、継続的インテグレーションとデリバリーを支援する能力があると思います。

    developmentというプロファイルが使用されている場所がわかりません。私は が私の仲間のチームメンバーにフォローアップする必要があります。


    資源:Mavenのプロジェクトサイトで

  • 1

    狙いを使用し、ユーザーがそれぞれの環境のために成果物を生成すると言うしません

  • 一度に中央サーバー(CI /ビルドサーバー)で、アーティファクトを生成し、ワンクリックでアプリケーションを開始/テストし、一貫性のある簡単な方法でビルドをチェックアウトして実行し、チェックインして構成することを目指しますあなたのCI。

    Mavenでプロファイルを使用し、Mavenターゲットを使用して、TeamCityのビルドサーバーを使用して適切なビルドを実現できます。

    Springコンテキストでプロパティプレースホルダコンフィグラを、各領域にファイルapplication.resourcesと、ファイル名のマスクを使用して使用します。 application-resources-${region}

  • 3

    あなたがスプリングブートを使用している場合、これを行う簡単な方法があります。

    mavenに2つのプロファイルを作成し、実行するSpringプロファイルの名前で各プロファイルのプロパティを設定します。あなたのapplication.propertiesインサイド

    <profile> 
         <id>dev</id> 
         <activation> 
          <activeByDefault>true</activeByDefault> 
         </activation> 
         <properties> 
          <!-- Default spring profile to use --> 
          <spring.profiles.active>dev</spring.profiles.active> 
          <!-- Default environment --> 
          <environment>develop</environment> 
         </properties> 
        </profile> 
    

    、このプロパティを追加します。 spring.profiles.active = $ {} spring.profiles.active

    このパターンを使用して、各プロファイルのapplication.propertyを作成用途向けprofile.properties。たとえば: application-dev.properties application-prod.properties

    は、リソースプラグインでアクティブなフィルタリングは、必ず:

    ... 
        <resource> 
        <directory>src/main/resources</directory> 
        <filtering>true</filtering> 
        </resource> 
    ... 
    

    もう一つの方法は、activeprofileと呼ばれるMavenの実行中にファイルを作成することです.properties。スプリングブートはこのファイルを参照して、アクティブなプロファイルをロードします。

    <plugin> 
          <groupId>org.apache.maven.plugins</groupId> 
          <artifactId>maven-antrun-plugin</artifactId> 
          <executions> 
           <execution> 
            <phase>prepare-package</phase> 
            <configuration> 
             <target> 
              <echo message="spring.profiles.active=${spring.profiles.active}" file="target/classes/config/activeprofile.properties" /> 
             </target> 
            </configuration> 
            <goals> 
             <goal>run</goal> 
            </goals> 
           </execution> 
          </executions> 
          <configuration> 
          </configuration> 
         </plugin> 
    
    関連する問題