Подтвердить что ты не робот

Как скопировать ресурс в Maven в зависимости от целевой среды?

Мне нужно создать тестовую войну и военную войну, которая будет иметь другой log4j.properties файл в каталоге WEB-INF. У меня есть эти файлы log4j.properties (тестовая война) и dev.log4j.properties (для производственного процесса).

Как скопировать файл dev.log4j.properties в файл log4j.properties для производственной войны?

4b9b3361

Ответ 1

  • Использовать профили 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

Ответ 2

Я решил это с помощью плагина 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>

Ответ 3

Приведенный выше код не помог мне - пришлось изменить его на следующее:

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

Ответ 4

Последний ответ работает. Но вам нужно предоставить версию, чтобы она работала.

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