Куди слід помістити файл 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-плагін для його створення. Всередині цього плагіна ви можете додати поточну папку JAR до шляху до класу, додавши aClass-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 :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
не так resource
, якщо я правильно пам’ятаю.
resource
була лише друкарською помилкою.
Ресурси, які використовуються для ініціалізації проекту, бажано містити в src / main / resource folder. Щоб увімкнути завантаження цих ресурсів під час збірки, ви можете просто додати записи до pom.xml у проект Maven як ресурс збірки
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Інші файли .properties також можуть зберігатися в цій папці, яка використовується для ініціалізації. Фільтрування встановлюється істинним, якщо ви хочете мати деякі змінні у файлах властивостей папки ресурсів та заповнити їх у файлах властивостей профільних фільтрів, які зберігаються у src / main / filters, який задано як профілі але це зовсім інший випадок використання . Поки що ви можете їх ігнорувати.
Це чудові додаткові ресурси для ресурсів , корисні, просто переглядайте й інші розділи.
Розміщення файлів ресурсів в іншому місці - це не найкраще рішення, яке ви можете використовувати:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Наприклад, коли файли ресурсів (наприклад, jaxb.properties) заглиблюються в пакети разом із класами Java.
Додайте нижченаведений код із тегів ресурсів у свої теги pom.xml всередині збірок. значить, це означає, що теги ресурсів повинні знаходитися всередині тегів збірки у вашому pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>