Куда мне поместить файл log4j.properties при использовании обычных каталогов Maven?
Куда мне поместить файл log4j.properties при использовании обычных каталогов Maven?
Ответы:
src/main/resources
это "стандартное размещение" для этого.
Обновление: приведенное выше отвечает на вопрос, но это не лучшее решение. Ознакомьтесь с другими ответами и комментариями по этому поводу ... вы, вероятно, не отправите свои собственные свойства ведения журнала вместе с jar, а вместо этого оставите его клиенту (например, серверу приложений, среде сцены и т.д.), чтобы настроить желаемое ведение журнала. Таким образом, это src/test/resources
мое предпочтительное решение.
Примечание. Говоря о том, чтобы оставить конкретную конфигурацию журнала клиенту / пользователю, вам следует подумать о замене log4j
на slf4j
в своем приложении.
resources
и log4j.properties
в папке, указанной в ответе.
src/main/resources
будут скопированы по умолчанию вtarget/classes
Просто поместите его 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-файл, вы, вероятно, использовали maven-assembly-plugin для его создания. Внутри этого плагина вы можете добавить текущую папку 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
каталог.
${project.build.directory}
или его следует изменить на фактический путь, по которому проект живет на моем локальном диске?
Некоторые «интеллектуального анализа данных» объясняют это src/main/resources
типичным местом.
Результаты поиска Google Code :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
нет resource
, если я правильно помню.
resource
была всего лишь опечатка.
Ресурсы, используемые для инициализации проекта, предпочтительно помещать в папку 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, который установлен как профили, но это совсем другой вариант использования , Пока вы можете игнорировать их.
Это отличные плагины ресурсов maven , они полезны, просто просмотрите и другие разделы.
Помещение файлов ресурсов в другое место - не лучшее решение, которое вы можете использовать:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Например, когда файлы ресурсов (например, jaxb.properties) попадают глубоко внутрь пакетов вместе с классами Java.
Если ваш файл log4j.properties или log4j.xml не найден в src / main / resources, используйте этот PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Добавьте приведенный ниже код из тегов ресурсов в свой pom.xml внутри тегов сборки. это означает, что теги ресурсов должны быть внутри тегов сборки в вашем pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>