기록하는 습관

[Spring] Gradle (5) - 의존성 본문

개발/Spring

[Spring] Gradle (5) - 의존성

로그뉴 2022. 7. 12. 16:17
  • classpath: 클래스나 jar 파일이 존재하는 위치
  • compile-time classpath: 에러 없이 컴파일을 하기 위해 필요한 클래스와 jar들의 위치를 나타낸다.
  • run-time classpath: 애플리케이션이 정상적으로 실행하기 위해 필요한 클래스들과 jar들의 경로이다.
  •  

api vs implementation

  • api: 의존 라이브러리 수정시 본 모듈을 의존하고 있는 모듈들 또한 재빌드
    • A(api) ←  B ← C 의 경우 C 에서 A 를 접근할 수 있음
    • A 수정시 B 와 C 모두 재빌드
  • implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드

 

의존성 옵션들

  • implementation: 의존 라이브러리 수정시 본 모듈까지만 재빌드
    • 본 모듈을 의존하는 모듈은 해당 라이브러리의 api를 사용할 수 없음
  • api: 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들도 재빌드
    • 본 모듈을 의존하는 모듈은 해당 라이브러리의 api를 사용할 수 있음
  • compileOnly: compileClassPath에만 추가하겠다는 뜻
    • 컴파일시에만 빌드하고 빌드 결과물에는 포함시키지 않음. runtime 시 필요없는 라이브러리인 경우 (runtime 환경에 이미 라이브러리가 제공되고 있는가 하는 등의 경우)
    • 예: lombok → compile 시에 getter, setter 등 필요한 것 생성시키고, runtime 시에 사용하지 않음.
    • 참고: https://blog.gradle.org/introducing-compile-only-dependencies
  • runtimeOnly: runtimeClassPath에만 추가하겠다는 뜻
    • 예: DB관련 / 로그관련 dependency
    • compile 시에는 필요 없는데 runtime에서 의존하는 것들을 runtimeOnly로 설정.
  • annotationProcessor: annotation processor 명시 (gradle 4.6)
    • 참고: 
    • Annotation processing 이 필요없다고 예측되는 경우 빌드 제외

 

읽어보면 좋을 자료: https://kwonnam.pe.kr/wiki/gradle/java

Comments