web-dev-qa-db-ja.com

ターゲット環境に応じてリソースをMavenにコピーする方法は?

テスト戦争と本番戦争を作成する必要があります。これらはlog4j.propertiesディレクトリに別のWEB-INFファイルがあります。これらのファイルはlog4j.properties(テスト戦争)とdev.log4j.properties(本番環境用)です。

プロダクションウォーのためにdev.log4j.propertiesファイルをlog4j.propertiesファイルにコピーする方法

33
Spring Monkey
  • Mavenプロファイルを使用( http://maven.Apache.org/guides/introduction/introduction-to-profiles.html
  • 「dev」および「prod」プロファイルを作成し、各プロファイルの代替リソースセットを選択します。デフォルトでDevをアクティブにします。

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources/dev</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>prod</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources/prod</directory>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>
    
  • 目的のプロファイルを使用してビルド:mvn install -Pdevまたはmvn install -Pprod

58

Maven-resourcesプラグインを使用してこれを解決しました。本番環境用のリソースを含むprodディレクトリを作成し、プロセスリソースフェーズでWEB-INF/classesディレクトリにコピーしました。

<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-resources-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <id>copy-prod-resources</id>
            <phase>process-resources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>webapp/WEB-INF/classes</outputDirectory>
                <resources>
                    <resource>
                        <directory>src/main/resources/prod</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>
10
Spring Monkey

上記のコードは私にとってはうまくいきませんでした-それを次のように変更する必要がありました:

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-prod-resources</id>
      <phase>process-resources</phase>
      <goals>
         <goal>copy-resources</goal>
      </goals>
      <configuration>
        <!-- this is important -->
        <overwrite>true</overwrite>
        <!-- this as well (target/ was missing) -->
        <outputDirectory>${basedir}/target/classes</outputDirectory>
        <resources>
          <resource>
            <directory>src/main/resources/prod</directory>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>
5
stephanos

最後の応答は機能しています。しかし、それを動作させるにはバージョンを与える必要があります。

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <id>copy-prod-resources</id>
      <phase>process-resources</phase>
      <goals>
         <goal>copy-resources</goal>
      </goals>
      <configuration>
        <!-- this is important -->
        <overwrite>true</overwrite>
        <!-- target -->
        <outputDirectory>${basedir}/target/classes</outputDirectory>
        <resources>
          <resource>
            <!-- source -->
            <directory>src/main/resources/prod</directory>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>
3
mylas

別の方法は、maven-antrun-pluginを使用することです

<build>
    <plugins>
        <plugin>
          <groupId>org.Apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.7</version>
          <executions>
            <execution>
              <phase>validate</phase>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
                <tasks>
                  <echo>build.env: ${build.env} </echo>
                  <delete file="src/main/resources/log4j.properties" />
                  <copy file="src/env/${build.env}/log4j.properties"
                        tofile="src/main/resources/log4j.properties" />
                </tasks>
              </configuration>
            </execution>
          </executions>
        </plugin>
    </plugins>
</build>

リソースファイルが次の構造にあると仮定します。

src/
  env/
      dev/
          log4j.properties
      local/
          log4j.properties
      prod/
          log4j.properties

Mavenビルドを行う場合、環境ごとに次のコマンドを実行します。

mvn package -Dbuild.env=dev
mvn package -Dbuild.env=local
mvn package -Dbuild.env=prod
0
Jonathan L