제목 그대로 gradle의 compileOnly, implementation의 차이에 대해서 과연 잘 알면서 썻는가? 이다.
개인적으로는 필요로 하면 찾아서 사용하다보니, 그렇게 까지는 관심있게 보지는 않았습니다.(반성..ㅜㅜ)
프로젝트를 빌드를 하는데 라이브러리가 중복이 되는 현상이 발생했었고, 이를 해결 하기위해서 이거 저것 찾아보다가 compileOnly, implementation의 차이에 대해서 정확하게 알면서 사용하고 있는가에 대해서도 반성하게 되었습니다.
결론 부터 말씀드리면 implementation 는 '컴파일 타임', '런타임'에만 모두 포함합니다.
반면 compileOnly는 '컴파일 타임'에만 필요하고, 런타임에는 필요하지 않습니다.
이해가 어려우니 예시를 보겠습니다.
ex)
compileOnly 'org.projectlombok:lombok'
implementation 'io.jsonwebtoken:jjwt:0.9.1'

jar 파일에서 라이브러리를 확인해보면 jwt-0.9.1 jar파일은 있습니다.

그렇다면 lombok은? jar파일에 존재하지 않습니다.
그 이유는 이미 lombok은 컴파일 타임에는 필요하지만 런타임에는 이미 그 기능인( 롬복 ) 기능을 수행한 상태임(이미 롬복이 실행이 끝낫다? ㅎㅎ )으로 필요하지 않아서 jar로 변환하지 않아도 됩니다.
'웹 > Spring' 카테고리의 다른 글
Spring Data JPA에 대해서 (0) | 2024.02.03 |
---|---|
톰캣의 war 실행되는 원리? (0) | 2024.01.14 |
multiple gradle 빌드 시키기! (0) | 2024.01.08 |
gradle과 maven의 차이 (1) | 2024.01.08 |
Spring Security 구조에 대해서 -Saving Request Between Authentication, logging (0) | 2023.12.10 |