source

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

manysource 2022. 11. 3. 21:56

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

실행-> 실행 메뉴를 사용하여 IntelliJ IDE에서 간단한 Java 프로그램을 실행하고 있습니다.잘 되고 있어요.여기서 log4j 로깅을 추가합니다.

프로젝트 루트 아래에 리소스 폴더를 추가했습니다.그 폴더에 log4j.properties 파일을 추가했습니다.뭔가 기록하려고 코드를 바꿨어요.

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

IntelliJ 8을 사용하면 나는 술 취한 원숭이처럼 추측할 수 있었고 결국 그것을 작동시킬 수 있었다.나는 지금 9를 가지고 있고 완전히 실패한다.난 한 시간 동안 노력했어.Add to classpath 옵션은 어떻습니까? /fume /vent /rant

이것을 시험해 보세요.

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

실제로는 적어도 2가지 방법이 있습니다.첫 번째 방법은 ColinD에서 설명하고 있습니다.IDEA에서 "Resources" 폴더를 "Sources" 폴더로 구성하기만 하면 됩니다.리소스 패턴에 리소스 확장이 포함되어 있는 경우 [프로젝트와 출력 디렉토리를 자동으로 응용 프로그램의 클래스 경로로 설정]을 선택하면 출력 디렉터리로 복사됩니다.

다른 일반적인 방법은 "resources" 폴더를 클래스 경로에 직접 추가하는 것입니다.Project Structure | Modules | Your Module | Dependencies 、 Add 、 Single - Entry Module Library add 、 [ Resources ]폴더 경로를 지정합니다.

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

다른 log4j 구성으로 테스트하는 경우 실행/디버깅 구성에서 커스텀 구성 파일을 직접 지정하는 것이 더 쉬울 수 있습니다.VM 파라미터는 다음과 같습니다.

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

나도 같은 문제가 있어서 짜증나!!

나는 항상 내가 2번 대답으로 해야 한다고 생각해왔다.Intelij 9(현재는 10을 사용)에서 사용 가능했습니다.

그러나 이러한 행을 maven pom 파일에 추가하면 다음과 같은 도움이 된다는 것을 알게 되었습니다.

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

Intellij 13x에서 이 작업을 수행하는 방법을 찾는 데 많은 시간을 할애했습니다.속성 파일을 필요로 하는 아티팩트에 추가한 적이 없는 것 같습니다.이것은 Intelij의 다른 순서입니다.다음 설정은 여러 모듈이 공유하는 속성 파일이 있는 경우에도 작동합니다.

  • 프로젝트 셋업으로 이동(CTRL + ALT + SHIFT + S)
  • 목록에서 하나 이상의 속성 파일을 추가할 모듈을 선택합니다.
  • 오른쪽에서 Dependencies 탭을 선택합니다.
  • 녹색 더하기 버튼을 클릭하고 "자 또는 디렉토리"를 선택합니다.
  • 이제 속성 파일이 들어 있는 폴더를 선택합니다.(개별 파일을 포함시켜 본 적이 없습니다)
  • 선택한 파일의 「카테고리」를 묻습니다.classes(클래스 없음)를 선택합니다.
  • 이제 속성 파일을 아티팩트에 추가해야 합니다.Intelij가 아래에 표시된 바로 가기를 제공합니다.맨 아래 빨간색 부분에 오류가 표시되고 클릭하면 아티팩트에 파일을 추가하는 옵션이 표시되는 '빨간 전구'가 표시됩니다.또한 'artifacts' 섹션으로 이동하여 파일을 아티팩트에 수동으로 추가할 수도 있습니다.

여기에 이미지 설명 입력

확장자가 .ini인 파일을 클래스 패스에 추가하는 것과 같은 문제에 직면했습니다.답변을 찾았습니다.즉, [설정] -> [컴파일러] -> [리소스 패턴] -> [...];*.ini 에 추가합니다.

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

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

  • 맨 왼쪽 목록에서 [Project Settings]> [ Modules ]를 선택합니다.

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

  • 있는 즉 '오빠'를 전개해 ./home/<username>/IdeaProjects/<projectName>

  • 오른쪽의 [Content Root]섹션을 보면 빨간색 경로는 작성하지 않은 디렉토리입니다.자원 저는 ★★★★★★★★★★★★★★★★★★★를 만들었습니다.src/main/resourceslog4j.properties에 넣습니다.콘텐츠 루트를 수정하여 원하는 위치에 배치할 수도 있습니다(저는 이 작업을 수행하지 않았습니다).

  • SBT 설정으로 코드를 실행했더니 log4j.properties 파일이 검색되었습니다.

여기에 이미지 설명 입력

Eclipse에서 IntelliJ로 이행하는 분들을 위해 속성 파일이나 기타 자원 파일을 작업할 때 유용한 정보를 제공합니다.

당황스럽지만(찾는데 하룻밤이 걸렸지만) IDE에서 로컬로 실행하거나 디버깅 중에 리소스/프로퍼티 파일을 찾을 때 두 IDE 모두 상당히 다르게 작동합니다(.jar로 패키징하는 것도 상당히 다르지만 문서화가 더 잘 됩니다).

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

new FileInputStream("xxxx.properties");

(JAR과 함께 패키지화하지 않는 특정 .properties 파일을 사용하는 경우 편리합니다.)

인텔리

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

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

이클립스

이클립스는 xxxx.properties 파일이 프로젝트 ROOT 자체에 있을 때 만족합니다.

따라서 인텔리J는 .properties 파일이 이클립스 파일보다 한 단계 더 높을 것으로 예상하고 있습니다.

내보낸 .jar에 같은 줄의 코드("new FileInputStream("xxxxx.properties"))가 있는 경우 코드를 실행하는 방법에도 영향을 줍니다.민첩하게 .properties 파일을 jar로 패키지하지 않으려면 명령줄에서 .properties 파일을 올바르게 참조하기 위해 다음과 같이 jar를 실행해야 합니다.

인텔리제 수출용 병

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

이클립스 수출용 병

java -jar some.jar

여기서 Eclipse export 실행 파일 jar는 참조된 .properties 파일이 .jar 파일이 있는 위치와 같은 위치에 있을 것으로 예상합니다.

디렉토리를 오른쪽 클릭하고 디렉토리를 다음과 같이 [Resources root]를 선택합니다.

여기에 이미지 설명 입력

이미 답변이 끝난 질문이기 때문에 다소 주제에서 벗어난 것 같습니다만, 저도 같은 문제를 경험한 적이 있습니다.제 경우 컴파일 시 일부 유닛 테스트 리소스만 출력 폴더에 복사되었습니다.META-INF 폴더에 있는 persistence.xml은 복사만 되고 다른 것은 복사되지 않았습니다.

결국 문제가 있는 파일의 이름을 바꾸고 프로젝트를 다시 빌린 다음 파일 이름을 원래 이름으로 변경하여 문제를 해결했습니다.왜 이게 먹혔는지 묻지 마세요. 하지만 먹혔어요.제 추측으로는 인텔리J 프로젝트가 파일 시스템과 다소 동기화되지 않아 이름 변경 작업이 내부 "리소스 재스캔"을 유발한 것 같습니다.

이건 내가 저지른 멍청한 실수 중 하나야.저는 이 문제를 디버깅하기 위해 많은 시간을 들여 위의 모든 응답을 시도했지만, 결국 그것은 저의 많은 바보 같은 실수 중 하나였습니다.

는 용 i i용었 i i i i i 。org.apache.logging.log4j.Logger을 사용하는 (:fml:)를 사용해야 .org.apache.log4j.Logger이 올바른 로거를 사용하여 나의 저녁을 구했다.

유닛 테스트용 log4j.xml 파일에서도 비슷한 문제가 발생했는데, 위의 작업을 모두 수행했습니다.하지만 실패한 테스트만 다시 실행했기 때문에... 전체 테스트 클래스를 다시 실행하면 올바른 파일이 선택됩니다.Intelli-j 9.0.4의 경우

언급URL : https://stackoverflow.com/questions/3765998/add-a-properties-file-to-intellijs-classpath