728x90
반응형
[Gradle] Gradle dependency (그래들 종속성 선언)
Dependency configuration
Gradle 프로젝트에 선언된 의존성들은 특정한 Scope 에 적용 되어진다.
예를 들어 일부 의존성은 런타임에서, 다른 의존성은 컴파일에서 사용 된다.
설정에 대한 옵션들은 여기서 확인 가능하다.
https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html
Dependency configuration inheritance and composition
각 설정들은 다른 설정으로부터 상속 구조를 가질 수 있는 구성이다.
상속 구조는 Java plugin에서 많이 사용되고 대표적인 예시는 implementation을 상속 받은 testImplementation이 있다.
Choosing the right configuration for dependencies
꼭 이렇게 해야 한다 같은 룰은 없지만, 어떤 유형의 Dependecy 설정을 사용할지는 매우 중요하다.
대부분의 경우 어떻게 구성되어 있는지에 따라서 다르고 적용된 플러그인 마다 결정될 수 있다.
Defining custom configurations
직접 Custom Configuration을 선언할 수도 있는데 이는 특정 목적을 위해서 의존성 범위를 분리하는데 주요하다.
예를 들어 JSP 컴파일을 하는 Jasper Ant task에 대한 의존성 선언을 하고 컴파일 클래스 패스에 제외한다고 하면 아래 처럼 사용할 수 있다.
val jasper by configurations.creating
repositories {
mavenCentral()
}
dependencies {
jasper("org.apache.tomcat.embed:tomcat-embed-jasper:9.0.2")
}
tasks.register("preCompileJsps") {
val jasperClasspath = jasper.asPath
val projectLayout = layout
doLast {
ant.withGroovyBuilder {
"taskdef"("classname" to "org.apache.jasper.JspC",
"name" to "jasper",
"classpath" to jasperClasspath)
"jasper"("validateXml" to false,
"uriroot" to projectLayout.projectDirectory.file("src/main/webapp").asFile,
"outputDir" to projectLayout.buildDirectory.file("compiled-jsps").get().asFile)
}
}
}
Module Dependency kinds
구분 | 용도 | 특징 |
implementation | 프로젝트의 컴파일 타임과 런타임에 모두 필요한 의존성을 추가 | implementation으로 추가된 의존성은 해당 모듈 내에서만 사용되며, 모듈을 의존하는 다른 모듈에는 노출되지 않습니다. 이는 컴파일 타임의 의존성을 최소화하여 빌드 시간을 단축시키고, API의 불필요한 노출을 방지합니다. |
compileOnly | 컴파일 시에만 필요하고, 런타임 시에는 필요하지 않은 의존성을 추가 | 주로 API나 애노테이션 프로세서 같이 실제 런타임에는 포함될 필요가 없는 경우에 사용됩니다. 이 설정으로 추가된 의존성은 런타임 경로에 포함되지 않습니다. |
runtimeOnly | 런타임 시에만 필요하고, 컴파일 시에는 필요하지 않은 의존성을 추가 | JDBC 드라이버나 SLF4J 구현체 같은, 실행 시에만 필요한 라이브러리에 사용됩니다. 이 설정으로 추가된 의존성은 컴파일 시에는 경로에 포함되지 않으며, 런타임 시에만 경로에 추가됩니다. |
testImplementation | 테스트 컴파일과 실행 시에만 필요한 의존성을 추가 | 테스트 코드 작성에 필요한 라이브러리나 프레임워크(예: JUnit, MockK 등)에 사용됩니다. 이 설정으로 추가된 의존성은 테스트 코드의 컴파일과 실행 시에만 사용되며, 메인 어플리케이션 빌드나 실행에는 포함되지 않습니다. |
Ref
https://docs.gradle.org/current/userguide/declaring_dependencies.html
728x90
반응형
'Kotlin & Java' 카테고리의 다른 글
Intellij에서 Kotlin을 Java로 변환 확인 하는 방법 (0) | 2023.10.29 |
---|