2009-02-04 7 views
33

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

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

ответ

54
  • Использование 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

+0

Это кажется очень элегантным, чем у меня раньше! –

+2

Так рад это слышать. Maven может показаться сложным, но, когда его используют на линиях наилучшей практики, таких людей, как вы, говорят, что «красиво!» –

+0

Очень полезно. Для немного более сложной версии вы можете добавить дополнительные "ресурс" каталоги: DEV True SRC/основные/ресурсы/общее src/main/resou РЭЦ/Dev

9

Я решил это использовать плагин 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> 
5

Код выше не работает для меня - пришлось изменить его на следующее:

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

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

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

Я пробовал это решение, но теперь maven добавляет дополнительный каталог prod в классы. Также создаются мои другие каталоги, такие как dev и test. Что я здесь делаю неправильно? – Gambo

 Смежные вопросы

  • Нет связанных вопросов^_^