5

Maven を使用して、さまざまなローカル リージョンとテスト リージョンのアーティファクト生成を処理したいと考えています。さまざまなプロファイルを使用できると思いますが、確信が持てません。

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

私が欲しいのは、プロジェクトのリソース用に次のフォルダーを用意することです

  • ローカル
  • ビルドサーバー
  • 開発者
  • システム
  • 製品

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

主な結果は次のとおりです。

  • IDE (IntelliJ) 内からMaven ライフサイクル フェーズを制御する
  • フェーズとチームのプロセスを複雑にしない
  • 開発者ごとに一貫性を保つ
  • インストールなどのフェーズの実行時に、開発者/地域ごとに異なる構成を非表示にします

理想的には、ベスト プラクティス (Duvall、Matyas、Glover)に従ってプロジェクトをセットアップします。

4

3 に答える 3

4

現在、さまざまなプロパティを提供していますが、さまざまなフォルダーを経由していません。これは、

  • 春のPropertyPlaceholderConfigurer
  • Maven プロファイル (開発環境を構築するために使用するもの)、
  • ビルド サーバー (この場合は TeamCity)
  • 正しいアーティファクトを生成する Maven フェーズ
  • 起動引数とビルド引数

私たちが何をしているのかについての私の理解は限られていますが、うまくいけば、これが他の人やおそらく私自身が考えるのに役立つ例として役立つでしょう.

以下に示すように、さまざまなプロパティ ファイルを指すパラメーターが用意されています。各プロパティ ファイルには、リージョン/環境の構成が含まれています。他の人に何らかの使用を提供する場合に備えて、現在の使用をできる限り説明します。

Maven プロファイルを使用するために、 と呼ばれるリージョン構成プロパティを含むprofileとして識別される pom にを作成しました。私たちのプロジェクトでそれがどのように使用されているかはまだ完全にはわかりませんが、以下の POM には Maven Compiler プラグインと Maven Tomcat プラグインが含まれていることがわかります。developmentenv

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

の値がenv利用可能になりますPropertyPlaceholderConfigurer


例 1profile - pom.xml での Maven の実装:

profilepomでの a の実装は次のとおりです。

<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 - 通常のビルド用のプロパティ プレースホルダー コンフィギュアラー:

また、Spring コンポーネントであるPropertyPlaceholderConfigurer. これを build 引数と組み合わせて使用​​し、リソース ファイルへのクラスパスポインターを設定します。

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


例 3 - テスト用のプロパティ プレースホルダー コンフィギュアラー:

統合テスト用に特別にセットアップされた Spring Context がありますPropertyPlaceholderConfigurer@ContextConfiguration(locations = {"classpath:test-dataexchange-application-context.xml"})これらは、との組み合わせを使用して統合テスト クラスによって検出されます@RunWith(SpringJUnit4ClassRunner.class))。テスト コンテキスト

では、次のように構成して、統合テスト領域のプロパティを取得します。PropertyPlaceholderConfigurer

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


その他の注意事項:

私たちはビルド管理に Team City を利用していますが、これらの設定がそこでどのように使用されているかを見たことがありません。上記のアプローチを組み合わせて、継続的インテグレーションとデリバリーを支援する機能があると考えられます。

として識別されたプロファイルが使用されている場所がわかりませんdevelopment。これは、仲間のチーム メンバーと一緒にフォローアップしなければならないことです。


資力:

于 2013-06-11T14:24:00.607 に答える
3

Spring Boot を使用している場合、これを行う簡単な方法があります。

Maven で 2 つのプロファイルを作成し、実行する Spring プロファイルの名前を使用して各プロファイルにプロパティを設定します。

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

application.properties 内に、次のプロパティを追加します: spring.profiles.active=${spring.profiles.active}

このパターン application-profile.properties を使用して、プロファイルごとに application.property を作成します。例: application-dev.properties application-prod.properties

リソース プラグインでフィルタリングを有効にしてください。

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

もう 1 つの方法は、maven の実行中に activeprofile.properties というファイルを作成することです。Spring Boot はこのファイルを参照して、アクティブなプロファイルをロードします。このファイルは次のように作成できます。

   <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>
于 2015-03-13T00:08:21.423 に答える
1

中央サーバー (CI/ビルド サーバー) で一度に各環境のアーティファクトを生成することを目指し、アーティファクトを生成し、ワンクリックでアプリケーションをローカルで開始/テストすることを目指し、チェックアウトして実行するための一貫した学習しやすい方法を提供するCI をチェックインして構成します。

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

application.resources各リージョンのファイルとファイル名マスクを使用して、Spring コンテキストでプロパティ プレースホルダー コンフィギュアラーを使用しますapplication-resources-${region}

于 2013-07-16T09:03:30.807 に答える