Если вы используете maven, обычно вы помещаете log4j.properties в Java или ресурсы? - PullRequest
120 голосов
/ 27 февраля 2011

Где я должен поместить файл log4j.properties при использовании обычных каталогов Maven?

Ответы [ 6 ]

132 голосов
/ 27 февраля 2011

src/main/resources - это «стандартное размещение» для этого.

Обновление: Выше ответ на вопрос, но это не лучшее решение.Ознакомьтесь с другими ответами и комментариями по этому вопросу ... вы, вероятно, не отправите свои собственные свойства ведения журнала с помощью jar, а вместо этого оставите его клиенту (например, сервер приложений, сценическое окружение и т. Д.), Чтобы настроить желаемое ведение журнала.Таким образом, вводить его в src/test/resources - мое предпочтительное решение.

Примечание: Говоря о том, чтобы оставить конкретную конфигурацию журнала клиенту / пользователю, вы должны рассмотреть возможность замены log4j на slf4j в вашем приложении.

58 голосов
/ 20 сентября 2013

Просто поместив его в src/main/resources, вы свяжете его с артефактом. Например. если ваш артефакт - JAR, у вас будет файл log4j.properties, который потеряет первоначальную настройку регистрации.

Я обычно помещаю его в src/main/resources, и устанавливаю, что он должен быть выведен на цель так:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.directory}</targetPath>
            <includes>
                <include>log4j.properties</include>
            </includes>
        </resource>
    </resources>
</build>

Кроме того, чтобы log4j мог его увидеть, вам нужно добавить выходной каталог в путь к классам. Если ваш артефакт является исполняемым JAR, вы, вероятно, использовали его для создания. Внутри этого плагина вы можете добавить текущую папку JAR в путь к классу, добавив запись манифеста Class-Path, например:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.your-package.Main</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>.</Class-Path>
            </manifestEntries>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Теперь файл log4j.properties будет находиться рядом с вашим JAR-файлом, независимо настраиваемым.

Чтобы запустить приложение непосредственно из Eclipse, добавьте каталог resources в ваш путь к классам в вашей конфигурации запуска: Run->Run Configurations...->Java Application->New выберите вкладку Classpath, выберите Advanced и перейдите в каталог src/resources.

25 голосов
/ 27 февраля 2011

Некоторые «интеллектуальные данные» объясняют, что src/main/resources является типичным местом.

Результаты поиска Поиск кода Google :

  • src/main/resources/log4j.properties: 4877
  • src/main/java/log4j.properties: 215
9 голосов
/ 29 апреля 2013

Ресурсы, используемые для инициализации проекта, предпочтительно помещаются в папку src / main / resources .Чтобы разрешить загрузку этих ресурсов во время сборки, можно просто добавить записи в pom.xml в проекте maven в качестве ресурса сборки

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> 
        </resource>
    </resources>
</build> 

Другие файлы .properties также могут храниться в этой папке, используемой для инициализации.,Фильтрация устанавливается в значение true, если вы хотите иметь некоторые переменные в файлах свойств папки ресурсов и заполнять их из файлов свойств фильтров профиля, которые хранятся в файле src / main / filters, который установлен как profile , но этоэто совсем другой случай использования.Пока вы можете их игнорировать.

Это отличный ресурс плагины ресурсов maven , это полезно, просто просматривайте и другие разделы.

5 голосов
/ 28 июля 2011

Размещение файлов ресурсов в другом месте - не лучшее решение, которое вы можете использовать:

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <excludes>
        <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
<build>

Например, когда файлы ресурсов (например, jaxb.properties) идут глубоко внутри пакетов вместе с классами Java.

1 голос
/ 26 августа 2015

Если файл log4j.properties или log4j.xml не найден в src / main / resources, используйте этот PropertyConfigurator.configure ("log4j.xml");

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);
...