1

私は Maven の初心者であり、ビルド時に Web アプリケーションに構成情報パラメーターを指定する合理的な方法があるかどうか疑問に思っていました。

これが意味することは次のとおりです。Ant では、通常、フォルダー (例: config-params ) を作成し、そのフォルダーに、アプリケーションが実行される環境に適した設定で、いくつかのプロパティ ファイルまたはその他の必要なファイルを配置します。

例えば:

- test.jdbc.properties
- cert.jdbc.properties
- prod.jdbc.properties
- test.log4j.properties
- test.myapplication.properties
- test.web.xml

... ad nauseum

次に、ant ビルド スクリプトで、使用するファイルのセット ( testcertまたはprod ) を単に示すproject.propertiesファイルからプロファイル構成変数を読み取ります。

このようにして、既知の環​​境用にアプリケーションをビルドするときに、考えられるすべてのフレームワーク構成パラメーターをチェックすることを心配する必要はありません。

2つの質問:

  1. これは、非ハックな方法でMaven POMで達成できますか? アプリケーション ビルドのこの段階を扱っている Maven のドキュメント、本、またはリファレンスはありますか?

  2. アプリケーションのビルド プロファイルを特定の実行環境 (テスト、本番環境など) に向けるより賢明な方法はありますか? これは議論の余地があると思いますが、これを処理するためのよりシンプルでエレガントな方法があれば、私はすべて耳にします:P.

あなたが提供できる助けに感謝します。乾杯!

4

2 に答える 2

1

最初に、テスト環境の構成を src/test/resources に配置することをお勧めします。これは、Maven によって自動的にテストに使用できます。本番構成は src/main/resources に配置する必要があります。これは、パッケージ化およびリリース中に本番構成が自動的に使用されることを意味します。cert のような他の構成ターゲットは、別の環境用にアプリケーションを 2 回ビルドする必要があることを意味します。

さまざまな環境用のアーティファクトを生成する CI 環境で構築していますか? はい、プロファイルに基づくソリューションは、環境ごとに個別にアプリケーションを構築する必要があるという単純な理由から、適切な選択ではありません。さまざまな環境を表すアーティファクトを一度だけ構築する方がよいでしょう。次のようなことから始めましょう。

.
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |-- resources
    |   |-- environment
    |   |   |-- test
    |   |   |   `-- database.properties
    |   |   |-- qa
    |   |   |   `-- database.properties
    |   |   `-- production
    |   |       `-- database.properties
    |   `-- webapp

環境ごとに、さまざまな構成部分 (この場合はプロパティ ファイル) を含むフォルダーがあります。次のような maven-assembly-plugin の構成ファイル (すべての環境用) が必要です。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

  <id>test</id>
  <formats>
    <format>war</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <useProjectArtifact>true</useProjectArtifact>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <outputDirectory>WEB-INF</outputDirectory>
      <directory>${basedir}/src/main/environment/test/</directory>
      <includes>
        <include>**</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

もちろん、maven-assembly-plugin の構成は次のようになります。

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <id>test</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
      <execution>
        <id>qa</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
      <execution>
        <id>production</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
    </executions>
  </plugin>

その結果、次のように、環境ごとに 1 つのアーティファクトを生成する 1 つのビルドのみが作成されます。

  1. artifactId-バージョン-test.war

  2. artifactId-バージョン-qa.war

  3. artifactId-version-production.war

于 2012-06-16T17:00:26.127 に答える
0

Maven ビルド プロファイルについてお読みください。

基本的な概念は、1 つのファイルに複数のビルド構成を作成しPOM、次を使用してそれらを呼び出すことです。

mvn -P <profile-name> <targets>

<activation/>ルールを定義することで、使用するプロファイルを Maven に決定させることもできます。

于 2012-06-16T16:47:38.813 に答える