Uruchamiam prosty program Java z IntelliJ IDE przy użyciu menu Run-> Run. To działa dobrze. Teraz chcę dodać logowanie log4j.
Dodałem folder zasobów w katalogu głównym projektu. Dodałem plik log4j.properties w tym folderze. Zmieniłem kod, żeby coś zarejestrować.
Jaki jest właściwy sposób poinformowania IntelliJ o dołączeniu folderu zasobów do ścieżki klas, aby plik właściwości był widoczny?
Z IntelliJ 8 mogłem odgadnąć rolę pijanej małpy i ostatecznie doprowadzić to do pracy. Mam teraz 9 i całkowicie mi się nie udało. Próbowałem przez godzinę. A może gdzieś opcja „Dodaj do ścieżki klas”? / fume / vent / rant
java
intellij-idea
classpath
Tony Ennis
źródło
źródło
Odpowiedzi:
Spróbuj tego:
źródło
Właściwie masz co najmniej 2 sposoby na zrobienie tego, pierwszy sposób jest opisany przez ColinD, po prostu skonfiguruj folder „resources” jako folder Sources w IDEA. Jeśli Wzory zasobów zawiera rozszerzenie zasobu, to zostaną skopiowane do katalogu wyjściowego po Bądź projekt i katalog wyjściowy jest automatycznie ścieżki klasy aplikacji.
Innym popularnym sposobem jest bezpośrednie dodanie folderu zasobów do ścieżki klas. Przejdź do struktury projektu | Moduły | Twój moduł | Zależności , kliknij Dodaj , Biblioteka modułów z pojedynczym wejściem , określ ścieżkę do folderu „zasoby”.
Jeszcze innym rozwiązaniem byłoby umieszczenie pliku log4j.properties bezpośrednio w katalogu źródłowym projektu (w domyślnym katalogu pakietu). Jest taki sam jak pierwszy, z tym wyjątkiem, że nie trzeba dodawać kolejnego źródła źródłowego w ustawieniach ścieżek modułu , plik zostanie skopiowany do katalogu wyjściowego w programie Make.
Jeśli chcesz przetestować z różnymi konfiguracjami log4j, może być łatwiej określić niestandardowy plik konfiguracji bezpośrednio w konfiguracji Uruchom / Debuguj , parametry maszyny wirtualnej zapisane w następujący sposób:
-Dlog4j.configuration=file:/c:/log4j.properties
.źródło
Mam ten sam problem i strasznie mnie to irytuje !!
Zawsze myślałem, że powinienem zrobić odpowiedź 2. To kiedyś działało w Intellij 9 (teraz używa 10).
Jednak doszedłem do wniosku, że dodanie tej linii do mojego pliku pom Maven pomaga:
źródło
Spędziłem sporo czasu zastanawiając się, jak to zrobić w Intellij 13x. Najwyraźniej nigdy nie dodałem plików właściwości do artefaktów, które ich wymagały, co jest oddzielnym krokiem w Intellij. Poniższa konfiguracja działa również, gdy masz plik właściwości, który jest współużytkowany przez wiele modułów.
źródło
Podobnym wyzwaniem było dodanie plików z rozszerzeniami .ini do ścieżki klas. Znalazłem tę odpowiedź , czyli dodać ją do Preferencje -> Kompilator -> Wzorce zasobów -> [...]; *. Ini
źródło
Jeśli kiedykolwiek napotkasz ten sam problem ze Scalą i SBT:
Przejdź do struktury projektu. Skrót to (CTRL + ALT + SHIFT + S)
Na liście po lewej stronie wybierz Ustawienia projektu> Moduły
Na liście modułów po prawej stronie wybierz moduł o nazwie projektu (bez kompilacji) i wybierz zakładkę źródła
W środku rozwiń folder, który jest dla mnie głównym katalogiem twojego projektu
/home/<username>/IdeaProjects/<projectName>
Spójrz na sekcję Content Root po prawej stronie, czerwone ścieżki to katalogi, których nie utworzyłeś. Będziesz chciał umieścić plik właściwości w katalogu zasobów. Utworzyłem więc
src/main/resources
i umieściłem w nim log4j.properties. Uważam, że możesz również zmodyfikować główny katalog zawartości, aby umieścić go w dowolnym miejscu (nie zrobiłem tego).Uruchomiłem kod z konfiguracją SBT i znalazłem mój plik log4j.properties.
źródło
Dla tych z Was, którzy dokonują migracji z Eclipse do IntelliJ lub odwrotnie, tutaj jest wskazówka dotycząca pracy z plikami właściwości lub innymi plikami zasobów.
To irytujące (kosztowało mnie cały wieczór, żeby się dowiedzieć), ale oba IDE działają zupełnie inaczej, jeśli chodzi o wyszukiwanie plików zasobów / właściwości, gdy chcesz uruchomić lokalnie ze swojego IDE lub podczas debugowania. (Pakowanie do pliku .jar jest również zupełnie inne, ale to lepiej udokumentowane).
Załóżmy, że w kodzie znajduje się odwołanie do ścieżki względnej, takie jak to:
(co jest wygodne, jeśli pracujesz z plikami .properties specyficznymi dla środowiska, których nie chcesz pakować razem z plikiem JAR)
INTELLIJ
(Używam 13.1, ale może być ważny dla większej liczby wersji)
Plik xxxx.properties musi znajdować się w katalogu PARENT ROOT projektu, aby można go było pobrać w czasie wykonywania w IntelliJ. (ROOT projektu to miejsce, w którym znajduje się folder / src)
ZAĆMIENIE
Eclipse jest po prostu szczęśliwy, gdy plik xxxx.properties znajduje się w samym katalogu ROOT projektu.
Więc IntelliJ spodziewa się, że plik .properties będzie o 1 poziom wyższy niż Eclipse, gdy tak się do niego odwołuje !!
Ma to również wpływ na sposób wykonywania kodu, gdy masz tę samą linię kodu (nowy FileInputStream ("xxxx.properties");) w wyeksportowanym pliku .jar. Jeśli chcesz być zwinny i nie chcesz spakować pliku .properties ze swoim jar, musisz wykonać jar jak poniżej, aby poprawnie odwołać się do pliku .properties z wiersza poleceń:
EKSPORTOWANY SŁOIK INTELLIJ
EKSPORTOWANY SŁOIK ECLIPSE
gdzie wyeksportowany plik jar wykonywalny Eclipse będzie po prostu oczekiwał, że przywoływany plik .properties będzie w tym samym miejscu, w którym znajduje się plik .jar
źródło
Być może jest to trochę nie na temat, biorąc pod uwagę, że odpowiedź na to pytanie została już udzielona, ale miałem podobny problem. W moim przypadku tylko niektóre zasoby testów jednostkowych zostały skopiowane do folderu wyjściowego podczas kompilacji. Mój persistence.xml w folderze META-INF został skopiowany, ale nic więcej .
Ostatecznie „rozwiązałem” problem, zmieniając nazwy problematycznych plików, przebudowując projekt, a następnie zmieniając nazwy plików z powrotem na oryginalne. Nie pytaj mnie, dlaczego to zadziałało, ale zadziałało. Moje przypuszczenie jest takie, że w jakiś sposób mój projekt IntelliJ stracił synchronizację z systemem plików i operacja zmiany nazwy wyzwoliła jakieś wewnętrzne „ponowne skanowanie zasobów”.
źródło
To jeden z głupich błędów, które popełniłem. Spędziłem dużo czasu próbując rozwiązać ten problem i wypróbowałem wszystkie odpowiedzi zamieszczone powyżej, ale ostatecznie był to jeden z wielu moich głupich błędów.
Używałem
org.apache.logging.log4j.Logger
(: :) FML natomiast powinny użyłemorg.apache.log4j.Logger
. Korzystanie z tego poprawnego rejestratora uratowało mi wieczór.źródło
Miałem podobny problem z plikiem log4j.xml do testu jednostkowego, wykonałem wszystkie powyższe czynności. Ale zorientowałem się, że to dlatego, że tylko ponownie przeprowadziłem test, który zakończył się niepowodzeniem ... jeśli ponownie uruchomię całą klasę testu, zostanie pobrany właściwy plik. To jest w Intelli-j 9.0.4
źródło