Gradle을 사용하면서 gradle의 dependencies로 사용하고 있는 의존성 jar들을 복사하는 방법과 task를 만들어서 진행하는 방법에 대해서 알아보겠습니다.
Maven에서는 mvn dependency:copy-dependencies라는 방법을 통해서 target/ 영역에 사용하는 jar들을 다운로드할 수 있습니다.
Gradle에서는 별도로 jar 복사하는 방법을 제공해주지 않아서 직접 task를 만들어야 합니다.
해당 포스팅에서는 gradle 버전을 7.5을 사용했습니다.
Spring Boot + Gradle 프로젝트는 있다고 가정을 하고 진행하겠습니다.
build.gralde copyDependencies 추가
copyDependencies task를 작성할려면 build.gradle에 3가지 내용을 추가해주셔야 합니다.
- plugins에 id 'java-library' 추가
- configuration.implementation, api의 canBeResolved true 추가
- task copyDepenencies 추가
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'java-library'
}
group = 'org.example'
version = '1.0-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
configurations.implementation.canBeResolved=true
configurations.api.canBeResolved=true
task copyDependencies(type: Copy) {
from configurations.api
from configurations.implementation
into "$buildDir/dependencies"
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
plugins에 id 'java-library' 추가
java-library라는 플러그인이 있어야 api 태그를 정상 사용이 가능합니다.
plugins {
id 'java-library'
}
configuration.implementation, api의 canBeResolved true 추가
configurations.~.canBeResolved=true 설정이 있어야 task copyDependencies에서 from 구문에 configurations.api와 configurations.implementation이 정상 동작이 가능합니다.
configurations.implementation.canBeResolved=true
configurations.api.canBeResolved=true
task copyDependencies 추가
task CopyDependencies를 작성해줍니다. 이름은 원하시는 이름으로 taks를 작성해주셔도 됩니다.
from 구문은 build.gradle dependencies{}에 api, implementation으로 작성되어 있는 의존성들을 가져온다는 의미입니다.
into 구문은 라이브러리들을 복사하는 target 경로입니다.
into 구문에 $buildDir는 gradle의 변수로 현재 프로젝트의 위치에서 /build 디렉터리를 말합니다.
프로젝트로 예시로 들면 project-name/build/dependencies 경로입니다.
task copyDependencies(type: Copy) {
from configurations.api
from configurations.implementation
into "$buildDir/dependencies"
}
gradle copyDependencies 실행
저는 IDE(이클립스, 인텔리제이)로 실행하지 않고 git bash에서 명령어를 실행하겠습니다.
gradle copyDependencies를 실행할 프로젝트로 이동을 해서 ./graldew copyDependencies 명령어를 입력해 줍니다.
BUILD SUCCESFUL이 나오면 build/dependencies를 조회해 봅니다.
gralde 명령어를 사용하시려면 환경변수로 지정해 주시면 사용 가능합니다.
저는 Spring boot + gradle 프로젝트의 내장 gradle을 사용하기 위해서 ./gradlew 명령어를 사용했습니다.
./gradlew 명령어는 내부의 gradlew를 실행하는 거라 환경변수로 지정하지 않고 사용 가능합니다.
ll
./gradlew copyDependencies
ll build/dependencies/
정상적으로 task가 실행이 되면 jar 라이브러리들이 복사된 것을 볼 수 있습니다.
정리
gradle의 copyDependencies task를 직접 작성해서 사용하는 방법에 대해서 알아봤습니다.
감사합니다.
'Gradle' 카테고리의 다른 글
Gradle 데몬을 사용하지 않는 법 (1) | 2024.12.12 |
---|---|
Gradle에서 환경별 Nexus 설정 관리하기 (8) | 2024.11.14 |
Gradle Build Lifecycle (0) | 2024.04.27 |
Spring Boot + Gradle build.gradle local .jar 추가 (2) | 2024.01.03 |