Gdzie należy umieścić plik log4j.properties w przypadku korzystania z konwencjonalnych katalogów Maven?
Gdzie należy umieścić plik log4j.properties w przypadku korzystania z konwencjonalnych katalogów Maven?
Odpowiedzi:
src/main/resources
jest do tego „standardowym rozmieszczeniem”.
Aktualizacja: powyższe odpowiedzi na pytanie, ale nie jest to najlepsze rozwiązanie. Sprawdź inne odpowiedzi i komentarze na ten temat ... prawdopodobnie nie wysyłałbyś własnych właściwości rejestrowania z jar, ale zamiast tego zostawiłbyś to klientowi (na przykład serwer aplikacji, środowisko sceny itp.), Aby skonfigurować żądane logowanie. Dlatego umieszczenie go src/test/resources
jest moim preferowanym rozwiązaniem.
Uwaga: Mówiąc o opuszczeniu config dziennika beton do klienta / użytkownika, należy rozważyć zastąpienie log4j
ze slf4j
w swojej aplikacji.
resources
iw log4j.properties
folderze wymienionym w odpowiedzi.
src/main/resources
zostaną domyślnie skopiowane dotarget/classes
Samo włożenie go src/main/resources
spowoduje umieszczenie go w artefakcie. Np. Jeśli twoim artefaktem jest JAR, będziesz mieć log4j.properties
plik w środku, tracąc początkowy punkt umożliwiający konfigurowanie logowania.
Zwykle umieszczam go src/main/resources
i ustawiam jako wyjście do celu w następujący sposób:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Ponadto, aby program log4j faktycznie go widział, musisz dodać katalog wyjściowy do ścieżki klasy. Jeśli twój artefakt to wykonywalny plik JAR, prawdopodobnie użyłeś wtyczki maven-assembly-plugin do jego utworzenia. Wewnątrz tej wtyczki możesz dodać bieżący folder pliku JAR do ścieżki klasy, dodając Class-Path
wpis manifestu w następujący sposób:
<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>
Teraz plik log4j.properties będzie znajdować się tuż obok pliku JAR i będzie można go niezależnie konfigurować.
Aby uruchomić aplikację bezpośrednio z Eclipse, dodaj resources
katalog do ścieżki klas w konfiguracji uruchamiania: Run->Run Configurations...->Java Application->New
wybierz Classpath
kartę, wybierz Advanced
i przejdź do swojego src/resources
katalogu.
${project.build.directory}
czy też należy ją edytować zgodnie z rzeczywistą ścieżką, w której projekt znajduje się na moim dysku lokalnym?
src/main/resources
Jest to typowe miejsce dla niektórych „eksploracji danych” .
Wyniki w Google Code Search :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
nie resource
, jeśli dobrze pamiętam.
resource
była tylko literówką.
Zasoby używane do inicjalizacji projektu najlepiej umieścić w folderze src / main / resources . Aby umożliwić ładowanie tych zasobów podczas kompilacji, można po prostu dodać wpisy w pom.xml w projekcie maven jako zasób kompilacji
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
W tym folderze używanym do inicjalizacji można również przechowywać inne pliki .properties. Filtrowanie jest ustawione na prawdę, jeśli chcesz mieć kilka zmiennych w plikach właściwości folderu zasobów i zapełnić je z plików właściwości filtrów profilu, które są przechowywane w src / main / filter, który jest ustawiony jako profile, ale jest to zupełnie inny przypadek użycia . Na razie możesz je zignorować.
To świetne wtyczki zasobów do zarządzania zasobami , przydatne, po prostu przejrzyj też inne sekcje.
Umieszczenie plików zasobów w innej lokalizacji nie jest najlepszym rozwiązaniem, z którego możesz skorzystać:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Na przykład, gdy pliki zasobów (np. Jaxb.properties) trafiają głęboko do pakietów wraz z klasami Java.
Jeśli plik log4j.properties lub log4j.xml nie został znaleziony w src / main / resources, użyj tego PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Dodaj poniższy kod z tagów zasobów w swoim pom.xml wewnątrz tagów kompilacji. więc oznacza to, że tagi zasobów muszą znajdować się wewnątrz tagów build w twoim pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>