2012-03-03 2 views
16

Я хочу иметь возможность использовать различные конфигурации log4j для разных сред.Как настроить maven для использования разных файлов log4j.properties в разных средах

В моей среде разработки я хочу использовать log4j.properties (A). Но когда я создаю Maven для рабочей среды, я хочу использовать log4j.properties (B).

Скажите, пожалуйста, как настроить это в моем pom.xml?

+0

ли вы использовать Maven-релиз-плагин управления производственной сборки? – yorkw

+0

Нет, я никогда не был сердцем maven-release-плагина раньше. Еще спасибо, я найду, справится ли она с проблемой. – Kedron

+5

Это тихий повторяющийся вопрос, и я хотел бы добавить свои два цента. Создание нескольких сборщиков для разных сред часто не принимается клиентом. Они хотят, чтобы одна конструкция для всех сред устраняла любые проблемы с регрессией с несколькими сборками. Файл log4j должен быть объявлен вне вашего приложения, как любые любые переменные среды. Философия, созданная после развертывания в любом месте, кажется, всегда теряется в профилях сборки maven. – tom

ответ

3
  1. в проекте добавить 3 папки:

    Вашего проекта \ SRC \ основные \ ресурсы \

    \A > log4j.properties 
        \B > log4j.properties 
        \Default > log4j.properties 
    
  2. в ПОМ.XML

    По умолчанию

    <build> 
        <resources> 
         <resource> 
          <directory>src/main/resources/${param}</directory>   
         </resource> 
        </resources> 
    </build> 
    
    • если: MVN чистую установку: => путь к классам log4j.properties (по умолчанию)

    • если: MVN чистую установку -Dparam = A: путь к классам => log4j.properties (A)

    • if: mvn clean install -Dparam = B: classpath => log4j.proper Хомуты (B)

гораздо лучше, чем при использовании профилей является более расширяемой, не касаясь POM

+0

добавить: \t \t По умолчанию

+0

ресурсы перегружать конфигурацию POM, поэтому если у вас есть другие файлы или каталоги, которые вы должны определить все :( – MychaL

11

Вы можете использовать профили для достижения желаемого поведения:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.5</version> 
      <executions> 
       <execution> 
        <id>log4j</id> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>output_directory</outputDirectory> 
         <resources> 
          <resource>${log4j.file}</resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <log4j.file>path_to_file_A</log4j.file> 
     </properties> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <log4j.file>path_to_file_B</log4j.file> 
     </properties> 
    </profile> 
</profiles> 
+1

Привет. Ресурсный элемент просто нужно немного больше любви: ' someResourceDir \t path_to_file_A ' – demaniak

+0

просто быстрый вопрос: Тетради ресурсы часть от «нормального» Maven lifecylce или поставляется с плагином ? –

+0

@al. Вы должны указать его явно. 'resources: resources' является частью жизненного цикла maven. –

1

Простейшим способом для меня,

  • Определить переменную ENV системы и установите его значение _dev для развития окр.
  • Где вы смотрите это использование файла как этот log4j $ {ENV} .properties

Так,

В производстве он просто использовать log4j.xml и для Дев log4j_dev.xml

  • Чтобы предотвратить проблемы, было бы лучше создать также переменную ENV для производства как _pro, так что для производства log4j_pro.xml, для dev log4j_dev.xml будет использоваться.

Я считаю, что полагаться на разные файлы, чем на копирование ресурса, лучше.

2

Вам не нужен плагин maven-resources, если у вас простая среда.

В этом примере log4j.properties B является файл, который вы используете для производства и находится в каталоге src/main/java и log4j.properties A это файл, который вы используете для разработки и находится в каталоге /Users/junger/.m2/.

В вашем pom.xml:

<properties> 
    <log4j.properties.directory>src/main/java</log4j.properties.directory> 
</properties> 

<build> 
    <resources> 
     <resource> 
      <directory>${log4j.properties.directory}</directory> 
      <includes> 
       <include>log4j.properties</include> 
      </includes> 
     </resource> 
    </resources> 
</build> 

Теперь в вашем /Users/junger/.m2/settings.xml (создать один, если он не существует):

<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <log4j.properties.directory>/Users/devuser/.m2/</log4j.properties.directory> 
     </properties> 
    </profile> 
</profile> 

Используя этот метод, каждый разработчик может иметь другой каталог log4j.properties, и вы сохраните свой pom.xml в чистоте.

1

В какой-то степени вы можете ссылаться на переменные окружения внутри log4j.properties, чтобы добавить поведение, зависящее от среды. , например.

log4j.rootLogger=${rootLoggerLevel}, ${appender} 
Смежные вопросы