4

Mavenでビルドし、NetBeans 7でコーディングし、GlassFish3.1.2にデプロイするJavaEE6アプリがあります。完成に近づくと、デモビルドを展開していることに気付きます。

問題は、dev、QA、demo、prodなどのさまざまな環境用にビルドする簡単な方法がないことです。いくつかのものについては、Javaクラスを使用しており、静的ゲッターが多数返されます。環境定数の値に基づく値。しかし、これは条件付きで設定するのに役立ちません

  • javax.faces.PROJECT_STAGE(web.xml)
  • データベースクレデンシャル(glassfish-resources.xml)
  • メールサーバー(glassfish-resources.xml)
  • JPAロギングレベル(persistence.xml)

そしておそらく、XMLファイル全体に散らばっている、今は考えられない他の多くのことです。

これらの構成ファイルの複数のバージョンを定義し、ビルド時にフラグを設定して環境を選択する方法はありますか?環境が指定されていない場合はデフォルトでdevになりますか?この場合、Mavenを機能させる方法はありますか?

4

3 に答える 3

11

それを達成するためにmavenを使用できます。特にリソース フィルタリングの使用。

まず、プロファイルのリストを定義できます:

  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <env>development</env>
      </properties>
      <activation>
        <activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
      </activation>
    </profile>
    <profile>
      <id>prod</id>
      <properties>
        <env>production</env>
      </properties>
    </profile>
  </profiles>

次に、フィルタリングする必要があるリソース:

  <build>
    <outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>
    <filters>
      <filter>src/main/filters/filter-${env}.properties</filter> <!-- ${env} default to "development" -->
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

次に、ディレクトリ内のプロファイルに基づくカスタム プロパティsrc/main/filters:

filter-development.properties

# profile for developer
db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:mem:web

filter-production.properties

# profile for production
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/web?createDatabaseIfNotExist=true

production プロファイルを使用するには、コマンドを使用して war をパッケージ化できますmvn clean package -Pprod

ここでは、maven で profile を使用するサンプル プロジェクトを確認できます。

于 2012-05-27T07:17:39.883 に答える
0

web.xml を設定する必要がある場合は、 https ://community.jboss.org/docs/DOC-19076 のハウツーを確認してください。

別の回答で説明されているのと同じ方法(リソースフィルタリング)を使用します。

于 2012-08-01T15:08:20.647 に答える
0

これは、質問に対する直接的な回答ではありません。これは、env プロパティを管理するための diff 戦略を説明 します。 diff env のプロパティを管理するもう 1 つの方法は、データベースを使用してプロパティを格納することです。この方法では、DB の構成を管理するだけで済みます。指しているDBに基づいて、そのDBからプロパティをロードできます。spring を使用している場合、spring は DB からプロパティを初期化できる PropertyPlaceholderConfigurer を提供します。このアプローチにより、ビルドを行わずにプロパティ値を変更できます。

このアプローチは、QA\Testing チームによってテストされたアーティファクトをプロモートする場合に役立ちます。この場合、DB 構成は、ビルド プロセスによって生成されるアーティファクトの一部にはなりません。

于 2012-05-27T07:32:17.803 に答える