IntelliJ의 클래스 경로에 속성 파일 추가


122

Run-> Run 메뉴를 사용하여 IntelliJ IDE에서 간단한 Java 프로그램을 실행하고 있습니다. 잘 작동합니다. 이제 log4j 로깅을 추가하고 싶습니다.

내 프로젝트 루트 아래에 리소스 폴더를 추가했습니다. 해당 폴더에 log4j.properties 파일을 추가했습니다. 뭔가를 기록하도록 코드를 변경했습니다.

IntelliJ에 클래스 경로에 리소스 폴더를 포함하여 속성 파일이 표시되도록하는 올바른 방법은 무엇입니까?

IntelliJ 8을 사용하면 취한 원숭이처럼 추측하여 결국 작동하게 할 수 있습니다. 나는 지금 9 개를 가지고 있고 나는 완전히 실패한다. 한 시간 동안 노력했습니다. 어딘가에 "클래스 경로에 추가"옵션은 어떻습니까? / fume / vent / rant


알겠습니다. 상황이 해결되었습니다. 이것은 IntelliJ의 새로운 설치입니다. log4J는 기본적으로 포함되어 있지 않습니다. 내 코드에서 log4j가 아닌 주식 로거를 가져 왔습니다. 스톡 로거는 유사한 방법을 지원하므로 잘못된 로거를 사용하고있는 것이 분명하지 않았습니다! log4j 속성 파일을 읽지 않거나 log4j를 구성해야한다고보고하지 않은 이유는 당연합니다. 이빨에 얼마나 킥!
Tony Ennis

에 초보자를위한 좋은 설명을 찾을 수 log4j에 tuttlem.github.io/2015/02/08/start-logging-with-log4j2.html
라할 카니 슈카

답변:


91

이 시도:

  • 프로젝트 구조로 이동합니다.
  • 모듈을 선택하십시오.
  • 오른쪽 트리에서 폴더를 찾아 선택합니다.
  • 해당 트리 (파란색 폴더가있는) 위에있는 소스 버튼을 클릭하여 해당 폴더를 소스 폴더로 만듭니다.

50 번 정도했는데 다시 한 번 했어요. 레이아웃 변환 패턴을 명백한 것으로 변경했지만 출력이 변경되지 않습니다. 다른 log4j.properties가 내 클래스 경로에 있는지 궁금합니다.
Tony Ennis

29
컴파일러 설정에서 리소스 패턴을 확인하십시오. 거기에 "? *. properties"가 있는지 확인하십시오. 그것은 기본적으로 거기에 있지만 그것이 내 머리 위에서 생각할 수있는 유일한 다른 것입니다.
ColinD

3
소스 버튼의 대안-생성 한 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 "다음으로 디렉토리 표시"를 선택합니다. "소스 루트"
mschr

10
임시 소스 구조 대신 Maven POM에서 프로젝트를 생성 한 경우이 솔루션은 작동하지 않습니다. 대신 해당 디렉터리를 POM에 리소스로 추가해야합니다. Peter Thygesen의 답변을 참조하십시오.
lreeder 2013-08-25

PropertyConfigurator.configure ( "../ conf / log4j.properties")를 통해 프로그래밍 방식으로 수행 할 수도 있습니다
Jason D

47

사실, 최소한 두 가지 방법이 있습니다. 첫 번째 방법은 ColinD에서 설명합니다. IDEA에서 "resources"폴더를 Sources 폴더로 구성하기 만하면됩니다. 리소스 패턴리소스 의 확장이 포함 된 경우 프로젝트 를 만들 때 출력 디렉터리에 복사 되고 출력 디렉터리는 자동으로 애플리케이션의 클래스 경로가됩니다.

또 다른 일반적인 방법은 "resources"폴더를 클래스 경로에 직접 추가하는 것입니다. 프로젝트 구조로 이동 | 모듈 | 귀하의 모듈 | 종속성 , 추가 , 단일 항목 모듈 라이브러리를 클릭 하고 "resources"폴더의 경로를 지정합니다.

또 다른 해결책은 log4j.properties 파일을 프로젝트의 소스 루트 (기본 패키지 디렉토리) 바로 아래 에 두는 것 입니다. 모듈 경로 설정 에서 다른 소스 루트를 추가 할 필요가 없다는 점을 제외하면 첫 번째 방법과 동일합니다 . 파일은 Make의 출력 디렉토리에 복사됩니다.

서로 다른의 log4j 구성으로 테스트 할 경우는 직접 사용자 정의 구성 파일을 지정하는 것이 더 쉬울 수 있습니다 실행 / 디버그 구성 , VM 매개 변수를 같이 제출 :

-Dlog4j.configuration=file:/c:/log4j.properties.


나는 당신의 단락 2와 3을 수행하지 않았습니다. 나는 제안 이 효과가 없었기 때문에 작동 한다고 확신합니다 . 클래스 경로에 다른 log4j.properties 파일이있는 것처럼 작동합니다. 하지만 어디에서도 볼 수 없습니다. 내 log4j 속성 파일을 모두 제거하면 콘솔에 "you must configure log4j warning"이 표시되지 않습니다. 저는 처음으로 무료 IntelliJ (및 버전 9.x)를 사용하고 있으므로 그와 관련이있을 수 있습니다.
Tony Ennis

1
명시 적 -D VM 매개 변수를 사용해도 효과가 없습니다. 이 시점에서 나는 내가 '멍청한 나무'의 꼭대기에서 떨어졌고 내려가는 모든 가지를 쳤다고 추측 할 수 있습니다! 내가 JetBrains의 주변에 트롤을 가서 주위에 물어 것 같아요 ...
토니 에니스

문제를 재현하는 정확한 단계와 함께 샘플 프로젝트를 support@jetbrains.com으로 보내 주시겠습니까?
CrazyCoder

프로그램 인수에 -Dlog4j.configuration = file : / c : /log4j.properties를 전달했습니다. VM 매개 변수가 나를 위해 트릭을했습니다.
Ajak6

42

나는 같은 문제가 있고 그것은 나를 엄청나게 짜증나게한다 !!

나는 항상 대답 2로 할 것이라고 생각했습니다. Intellij 9에서 작동했습니다 (현재 10 사용).

그러나 내 maven pom 파일에 다음 줄을 추가하면 도움이된다는 것을 알았습니다.

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>

그것은 내가 가진 정확한 문제였으며 이제 리소스 파일이 출력 폴더에 성공적으로 복사됩니다.
artjomka 2013 년

이 답변은 실제로 작동합니다. 나는 colinD가 그의 코멘트에서 제안한 것을했습니다. 감사합니다.

감사합니다. 이것이 저에게 도움이 된 유일한 해결책입니다.
Minh Thiện

18

Intellij 13x에서이 작업을 수행하는 방법을 알아내는 데 많은 시간을 보냈습니다. Intellij에서 별도의 단계 인 속성 파일을 필요한 아티팩트에 추가 한 적이없는 것 같습니다. 아래 설정은 여러 모듈에서 공유하는 속성 파일이있는 경우에도 작동합니다.

  • 프로젝트 설정으로 이동합니다 (CTRL + ALT + SHIFT + S).
  • 목록에서 하나 이상의 특성 파일을 추가 할 모듈을 선택하십시오.
  • 오른쪽에서 종속성 탭을 선택합니다.
  • 녹색 더하기를 클릭하고 "Jars 또는 디렉토리"를 선택합니다.
  • 이제 속성 파일이 포함 된 폴더를 선택합니다. (개인 파일을 포함하지 않았습니다)
  • Intellij는 이제 선택한 파일의 "범주"가 무엇인지 묻습니다. "클래스"를 선택하십시오 (아닌 경우에도).
  • 이제 속성 파일을 아티팩트에 추가해야합니다. Intellij는 아래와 같은 바로 가기를 제공합니다. 하단의 빨간색 부분에 오류가 표시되고 클릭하면 아티팩트에 파일을 추가하는 옵션이 표시되는 '빨간색 전구'가 표시됩니다. '아티팩트'섹션으로 이동하여 파일을 아티팩트에 수동으로 추가 할 수도 있습니다.

여기에 이미지 설명 입력


14

.ini 확장자를 가진 파일을 클래스 경로에 추가하는 유사한 문제에 직면했습니다. 이 답변을 찾았습니다.이 답변 은 Preferences-> Compiler-> Resource Patterns-> [...]; *. ini에 추가하는 것입니다.


1
이것이 내가 .conf 파일
James

내 코드에 무슨 문제가 있다고 생각 했어? 이 솔루션에 감사드립니다
Shoaib Chikate 2014

5

Scala 및 SBT에서 동일한 문제가 발생하는 경우 :

  • 프로젝트 구조로 이동합니다. 단축키는 (CTRL + ALT + SHIFT + S)입니다.

  • 맨 왼쪽 목록에서 프로젝트 설정> 모듈을 선택합니다.

  • 오른쪽의 모듈 목록에서 프로젝트 이름의 모듈 (빌드 제외)을 선택하고 소스 탭을 선택합니다.

  • 중간에 프로젝트의 루트 폴더를 확장합니다. /home/<username>/IdeaProjects/<projectName>

  • 오른쪽의 콘텐츠 루트 섹션을 보면 빨간색 경로는 아직 만들지 않은 디렉터리입니다. Resources 디렉터리에 속성 파일을 넣는 것이 좋습니다. 그래서 src/main/resourceslog4j.properties를 만들고 그 안에 넣었습니다. 콘텐츠 루트를 수정하여 원하는 곳에 둘 수도 있다고 생각합니다 (나는 이것을하지 않았습니다).

  • SBT 구성으로 내 코드를 실행했는데 내 log4j.properties 파일을 찾았습니다.

여기에 이미지 설명 입력


2

Eclipse에서 IntelliJ 또는 다른 방법으로 마이그레이션하는 사용자에게는 속성 파일 또는 기타 리소스 파일로 작업 할 때 유용한 팁이 있습니다.

그것의 미친 짓 (저의 밤을 알아내는 데 드는 비용)이지만 IDE에서 로컬로 실행하거나 디버깅하는 동안 리소스 / 속성 파일을 찾을 때 IDE의 작업은 상당히 다릅니다. (.jar로 패키징하는 것도 상당히 다르지만 더 잘 문서화되어 있습니다.)

코드에 다음과 같은 상대 경로 참조가 있다고 가정합니다.

new FileInputStream("xxxx.properties");

(JAR와 함께 패키징하고 싶지 않은 env 특정 .properties 파일로 작업하는 경우 편리합니다)

인텔리

(나는 13.1을 사용하지만 더 많은 버전에서 유효 할 수 있습니다)

xxxx.properties 파일은 IntelliJ에서 이와 같이 런타임에 선택되기 위해 프로젝트 ROOT의 PARENT dir에 있어야합니다. (프로젝트 ROOT는 / src 폴더가있는 곳입니다.)

Eclipse는 xxxx.properties 파일이 프로젝트 ROOT 자체에있을 때 행복합니다.

따라서 IntelliJ는 .properties 파일이 이와 같이 참조 될 때 Eclipse보다 1 수준 더 높을 것으로 예상합니다 !!

이는 또한 내 보낸 .jar에 동일한 코드 줄 (new FileInputStream ( "xxxx.properties");)이있을 때 코드를 실행해야하는 방식에도 영향을줍니다. 민첩하고 .properties 파일을 jar와 함께 패키징하지 않으려면 명령 줄에서 .properties 파일을 올바르게 참조하기 위해 아래와 같이 jar를 실행해야합니다.

INTELLIJ 내보내기 JAR

java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

ECLIPSE 내보내기 JAR

java -jar some.jar

Eclipse에서 내 보낸 실행 가능 jar는 참조 된 .properties 파일이 .jar 파일이있는 위치와 동일한 위치에있을 것으로 예상합니다.


예, log4j2.xml 또는 log4j.properties와 달리 logging.properties는 IntelliJ 모듈 루트에 있어야합니다. 또한 작동하는 Log4j와는 달리 IntelliJ (Eclipse는 동일한 이야기가 될 것입니다. 이것은 Java 로깅의 잘못입니다)에서 실행하기 위해 여전히 배심원이 필요하다는 것을 알았습니다 . stackoverflow.com/questions/960099/… 참조 . 한 가지 대안은 -Djava.util.logging.config.file =을 사용하여 실행 / 디버그 구성을 수정하는 것입니다. 코드 나 예상 속성 파일에 구성을 포함하고 싶기 때문에 다소 불편합니다.
Russ Bateman

1

아마도 이것은 질문이 이미 답변되었으므로 약간 주제에서 벗어난 것일 수 있지만 비슷한 문제가 발생했습니다. 제 경우에는 컴파일시 일부 단위 테스트 리소스 만 출력 폴더에 복사되었습니다. 내 persistence.xml을META-INF의 폴더에 복사되지있어 다른 아무것도 .

결국 문제가있는 파일의 이름을 바꾸고 프로젝트를 다시 빌드 한 다음 파일 이름을 원래 이름으로 다시 변경하여 문제를 "해결"했습니다. 왜 이것이 효과가 있었는지 묻지 마십시오. 내 추측으로는 IntelliJ 프로젝트가 파일 시스템과 동기화되지 않았고 이름 변경 작업이 일종의 내부 "리소스 재검색"을 트리거했다는 것입니다.


1

이것은 내가 한 멍청한 실수 중 하나입니다. 나는이 문제를 디버깅하기 위해 많은 시간을 보냈고 위에 게시 된 모든 응답을 시도했지만 결국 그것은 내 많은 멍청한 실수 중 하나였습니다.

나는 org.apache.logging.log4j.Logger(: fml :)을 사용하고 있었지만 org.apache.log4j.Logger. 이 올바른 로거를 사용하여 저녁을 절약했습니다.


0

단위 테스트를 위해 log4j.xml 파일과 비슷한 문제가 있었고 위의 모든 작업을 수행했습니다. 하지만 실패한 테스트 만 다시 실행했기 때문이라는 것을 알아 냈습니다. 전체 테스트 클래스를 다시 실행하면 올바른 파일이 선택됩니다. 이것은 Intelli-j 9.0.4에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.