Как настроить maven для использования разных файлов log4j.properties в разных средах
Я хочу иметь возможность использовать другую конфигурацию log4j для разных сред.
В моей среде разработки я хочу использовать log4j.properties(A). Но когда я создаю Maven для рабочей среды, я хочу использовать log4j.properties(B).
Скажите, пожалуйста, как настроить это в моем pom.xml?
Ответы
Ответ 1
-
в вашем проекте добавьте 3 папки:
Ваш проект \src\main\resources\
\A > log4j.properties
\B > log4j.properties
\Default > log4j.properties
-
в pom.xml
По умолчанию
<build>
<resources>
<resource>
<directory>src/main/resources/${param}</directory>
</resource>
</resources>
</build>
-
-
if: mvn clean install: classpath = > log4j.properties(по умолчанию)
-
if: mvn clean install -Dparam = A: classpath = > log4j.properties(A)
-
if: mvn clean install -Dparam = B: classpath = > log4j.properties(B)
намного лучше, чем использование профилей, более расширяемо, не касаясь pom
Ответ 2
Вы можете использовать профили для достижения желаемого поведения:
<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>
Ответ 3
Вам не нужен плагин 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 чистым.
Ответ 4
Самый простой способ для меня,
- Определите системную переменную ENV и установите ее значение _dev для разработки.
- Если вы ссылаетесь на этот файл, используйте этот файл log4j ${ENV}.properties
Итак,
В процессе производства он просто использует log4j.xml и для вашего dev log4j_dev.xml
- Чтобы предотвратить проблемы, было бы лучше создать также переменную ENV для производства как _pro, так что для производства log4j_pro.xml, для dev log4j_dev.xml будет использоваться.
Я считаю, что лучше использовать разные файлы, чем копировать ресурс.
Ответ 5
В некоторой степени вы можете ссылаться на переменные окружения внутри log4j.properties, чтобы добавить поведение, зависящее от среды.
например
log4j.rootLogger=${rootLoggerLevel}, ${appender}