файл конфигурации log4j в многомодульном проекте Maven - PullRequest
15 голосов
/ 12 ноября 2010

Я работаю над многомодульным проектом Maven, структура которого выглядит следующим образом:

war-module
jar-module

War-модуль зависит от jar-модуля и добавит артефакт jar в lib веб-приложениякаталог после упаковки.

И war-модуль, и jar-модуль используют Apache log4j для ведения журнала и используют один и тот же файл конфигурации log4j (log4j.xml), который в настоящее время находится в проекте jar-module.И этот log4j.xml будет упакован в файл jar-module.jar, однако я бы хотел поместить его в каталог WEB-INF / classes в пакете war, а не в файл jar, чтобы пользователям было легко найти этоконфигурационный файл и при необходимости измените его (им очень трудно найти его, если этот файл находится в WEB-INF / lib / jar-module.jar, потому что в этом каталоге много других jar-файлов).

Мой вопрос: как Maven решает эту проблему?

Обновление:

Мой настоящий проект немного сложнее, иесть ear-модуль, который также зависит от jar-модуля (иначе. jar-модуль может использоваться независимо в нескольких различных проектах, и я не могу просто поместить файл в каталог war-module / src / main / resources, чтобы исправить этоЭта проблема).И я не хочу дублировать некоторые файлы конфигурации, такие как log4j.xml (и другие файлы конфигурации, такие как myapp.properties), в нескольких проектах.

Ответы [ 3 ]

11 голосов
/ 15 ноября 2010

Я нашел ответ через еще несколько поисков в Интернете.

Обычно существует три способа совместного использования ресурсов в многомодульном проекте Maven:

  • Вырезайте и вставляйте их.
  • Используйте подключаемые модули и зависимости
  • Используйте плагин maven-remote-resources-*

Вот сообщение в блоге от Sonatype, компании Maven, о совместном использовании ресурсов между проектами в Maven,Точный ответ мне нужен:

http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/

6 голосов
/ 12 ноября 2010

В модуле jar исключите файл из jar:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <excludes>
        <exclude>log4j.xml</exclude>
      </excludes>
    </configuration>
</plugin>

Используйте плагин buildhelper, чтобы прикрепить файл log4j.xml к сборке как отдельный артефакт

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
      <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
          <goal>attach-artifact</goal>
        </goals>
        <configuration>
          <artifacts>
            <artifact>
              <file>${project.build.outputDirectory}/log4j.xml</file>
              <type>xml</type>
              <classifier>log4j</classifier>
            </artifact>
          </artifacts>
        </configuration>
      </execution>
    </executions>
</plugin>

Теперь в вашем артефакте войны скопируйте xml в выходной каталог:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>copy</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>copy</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>${project.groupId}</groupId>
              <artifactId>your.jar.project.artifactId</artifactId>
              <version>${project.version}</version>
              <type>xml</type>
              <classifier>log4j</classifier>
              <outputDirectory>${project.build.outputDirectory}
              </outputDirectory>
              <destFileName>log4j.xml</destFileName>
            </artifactItem>
          </artifactItems>
        </configuration>
      </execution>
    </executions>
</plugin>

Но, конечно, было бы проще просто поместить файл в [web-artifact] / src / main / resources в первыйместо: -)

1 голос
/ 11 сентября 2014

Исходя из моего опыта, это можно легко реализовать, просто:

  1. Создайте ресурс конфигурации log4j в родительском модуле.
  2. Вызвать зависимость log4j во всех модулях pom.

Надеюсь, это поможет вам

...