task moveLib {
doLast {
def unpackDir = "$buildDir/unpack"
ant.move(file: "${unpackDir}/app/BOOT-INF/lib", toFile: "${unpackDir}/lib")
}
}
task unpackJar(type: Copy) {
def unpackDir = "$buildDir/unpack"
delete unpackDir
from zipTree(jar.getArchiveFile())
into "$unpackDir/app"
finalizedBy moveLib
}
build {
finalizedBy unpackJar
}
도커의 계층구로로 라이브러리와 소스코드를 분리하여 도커 이미지를 빌드하는 build.gradle 코드이다
뒤에서 해당 소스를 A-1 이라 부르도록 하겠다.
스프링 부트 버전 2.5 부터 build시 위와 같이 plain.jar 파일이 같이 생성된다.
위 이미지와 같이 plain.jar는 디펜던시 라이브러리들과 스프링 소스들을 모두 빼고 내가 작성한 소스코드 들만 포함된 jar 파일인 것을 확인할 수 있다.
Execution failed for task ':moveLib'.
> Warning: Could not find file C:\workspace\DOWHAT\spring\dowhat-cloud\config-service\build\unpack\app\BOOT-INF\lib to copy.
이 상황에서 A-1 코드를 그대로 사용하면 위와 같은 에러를 볼 수 있을 것이다.
from zipTree(jar.getArchiveFile())
문제는 해당 부분에서 발생하는데 jar가 가리키는 파일이 plain.jar 이기 때문이다.
ant.move(file: "${unpackDir}/app/BOOT-INF/lib", toFile: "${unpackDir}/lib")
IMG-1 이미지를 보면 plain.jar에는 라이브러리 파일이 존재하지 않는데 라이브러리 파일을 복사하라고 하니
Could not find file 파일을 찾을 수 없다고 에러를 던지는 것이다.
task moveLib {
doLast {
def unpackDir = "$buildDir/unpack"
ant.move(file: "${unpackDir}/app/BOOT-INF/lib", toFile: "${unpackDir}/lib")
}
}
task unpackJar(type: Copy) {
def unpackDir = "$buildDir/unpack"
def jarFile = "$buildDir/libs/${rootProject.name}-${version}.jar"
delete unpackDir
from zipTree(jarFile)
into "$unpackDir/app"
finalizedBy moveLib
}
build {
finalizedBy unpackJar
}
나는 plain.jar가 아닌 기존의 jar 파일을 바라보게 하도록 위와 같이 설정하였다.
def jarFile = "$buildDir/libs/${rootProject.name}-${version}.jar"
기존의 jar 파일을 바라보게 해당 jar파일 경로를 선언해주고
from zipTree(jarFile)
해당 jar 파일을 참조하도록 설정하였다.
마지막으로 plain.jar 가 필요 없다면 build.gradle 에 아래와 같이 설정하면 plain.jar 없이 빌드 될것이다.
jar {
enabled = false
}
문서는 아래를 참고 하도록 하자
Spring Boot Gradle Plugin Reference Guide
To manage dependencies in your Spring Boot application, you can either apply the io.spring.dependency-management plugin or use Gradle’s native bom support. The primary benefit of the former is that it offers property-based customization of managed versio
docs.spring.io
'Spring' 카테고리의 다른 글
QueryDsl with Lombok (0) | 2021.08.05 |
---|---|
Zipkin - Docker MySQL (0) | 2021.07.25 |
Mapstruct & Lombok 적용 (3) | 2021.04.16 |
스프링 멀티 모듈 적용 (0) | 2021.03.15 |
[Jpa] ddl-auto: create 시 foreign key 제거 (0) | 2020.11.17 |