Gdzie należy umieścić plik log4j.properties w przypadku korzystania z konwencjonalnych katalogów Maven?
java
maven
configuration
log4j
user496949
źródło
źródło
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
zeslf4j
w swojej aplikacji.źródło
resources
iwlog4j.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
wybierzClasspath
kartę, wybierzAdvanced
i przejdź do swojegosrc/resources
katalogu.źródło
${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źródło
resources
nieresource
, 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.
źródło
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.
źródło
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);
źródło
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/>
źródło