개발을 하다 여러 기능을 사용하려면 의존성 추가를 해줘야한다. 그럴때는 Gradle을 통해 의존성선언을 해줘야 한다.
그럼 의존성 추가 시 어떤 옵션이 있는지 알아보자.
의존성을 컴파일 타임과 런타임에 모두 포함시킨다.
이 명령으로 추가된 라이브러리는 이 라이브러리를 사용하는 다른 모듈에 전달되지 않는다.
주로 외부 라이브러리를 추가할 때 사용
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
}
implementation과 유사하지만, 이 명령으로 추가된 라이브러리는 이 모듈을 사용하는 다른 모듈에도 전달된다
주로 라이브러리 모듈에서 다른 모듈로 노출하고자 하는 API 의존성을 정의할 때 사용된다.
dependencies {
api 'com.google.guava:guava:29.0-jre'
}
💡 build.gradle 에서 모듈이란?
root-project
├── settings.gradle
├── build.gradle
├── moduleA
│ └── build.gradle
└── moduleB
└── build.gradle
이런 식으로 여러 모듈이 나누어져 있을 때를 말한다.
api같은 경우 modelA, modelB에도 의존성이 추가된다.
- compileOnly:
- 의존성을 컴파일 타임에만 포함하고, 런타임에는 포함하지 않는다.
- 주로 어노테이션이나 컴파일 시에만 필요한 라이브러리를 추가할 때 사용된다.
```groovy
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.12'
}
```
의존성을 런타임에만 포함하고, 컴파일 타임에는 포함하지 않는다.
주로 테스트 라이브러리나 런타임 시에만 필요한 라이브러리를 추가할 때 사용된다.
dependencies {
runtimeOnly 'mysql:mysql-connector-java:8.0.22'
}
💡 왜 compileOnly, runtimeOnly를 따로 만들었을까?
롬복 라이브러리의 소스코드는 지정된 클래스에 Getter, Setter등의 메소드를 만들어주는 로직'을 수행한다.이런 메소드가 만들어지는 단계는 **컴파일 단계**임.즉, Lombok의 소스코드는 컴파일 단계에서만 사용됨.
따라서 Lombok의 소스코드는 애플리케이션 런타임시에는 사용되지 않기 때문에 빌드 결과물에 포함되지 않음.
따라서 굳이 런타임 시에도 사용 할 필요가 없다.이와 별도로 Lombok이 생성해준 소스코드는 빌드 결과물에 포함됨근거로 빌드된 .class파일을 열어보면 lombok 어노테이션은 사라지고 작성하지 않은 getter, setter 메소드가 존재하는 것을 볼 수 있음.
- testImplementation:
- 의존성을 테스트 컴파일 타임과 테스트 런타임에만 포함한다.
- 주로 테스트용 라이브러리를 추가할 때 사용된다.
```groovy
dependencies {
testImplementation 'junit:junit:4.13.1'
}
```
의존성을 테스트 컴파일 타임에만 포함하고, 테스트 런타임에는 포함하지 않는다.
dependencies {
testCompileOnly 'org.projectlombok:lombok:1.18.12'
}
의존성을 테스트 런타임에만 포함하고, 테스트 컴파일 타임에는 포함하지 않는다.
dependencies {
testRuntimeOnly 'org.testcontainers:junit-jupiter:1.15.1'
}
어노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할
dependencies {
annotationProcessor 'org.projectlombok:lombok'
}
**💡보통 Lombok이 되지 않는 다면 annotationProcessor도 추가를 해주자**

Annotation Processor 가 Lombok 어노테이션을 인식하고 실제 코드를 생성해주는 과정은 아래와 같다.