1. 개요
스프링부트 빌드 시 위와 같이, jar파일이 만들어진다.
실제로 사용하는 거는 .jar인데 대체 plain.jar는 왜 만들어지는지 궁금해졌다.
2. Executable Jar vs Plain Jar
.jar
- Executable Archive 또는 Executable Jar라고 부른다.
- 애플리케이션 구동에 필요한 모든 의존성이 포함되어 있다.
- bootJar 작업에 만들어진다.
plain.jar
- Plain Archive 또는 Plain Jar라고 부른다.
- executable jar와 달리 모든 의존성을 포함하지 않고 클래스와 리소스 파일만 포함되어 있다. 즉, 실행가능하지 않다.
- Jar 작업에 만들어진다.
- 라이브러리 형태로 재사용할 때 주로 쓰인다고 한다.
그렇다면 plain.jar는 도대체 왜 생기는 걸까..?
⇒ 스프링부트 버전 별로 다르지만 3.3.4버전에는 빌드 시 둘 다 생성되게 설정이 되어있다.
https://docs.spring.io/spring-boot/gradle-plugin/packaging.html
Packaging Executable Archives :: Spring Boot
By default, when the bootJar or bootWar tasks are configured, the jar or war tasks are configured to use plain as the convention for their archive classifier. This ensures that bootJar and jar or bootWar and war have different output locations, allowing bo
docs.spring.io
Plain Jar가 필요하지 않다면 아래 코드를 build.gradle에 넣어서 비활성화 할 수 있다.
tasks.named("jar") {
enabled = false
}
추가로 아래 두 개의 차이는 뭔지 궁금해졌다.
jar{
enabled = false
} //1번
tasks.named("jar") {
enabled = false
} //2번
1번
- Gradle DSL을 사용해서 직접적으로 jar 작업 블록에서 enabled 속성을 false로 설정하는 선언적 방식이다.
- Gradle이 이 블록을 처리하는 순간 바로 jar 작업이 비활성화된다.
2번
- Gradle 5.1 이후 추가된 lazy configuration 방식으로 Gradle이 특정 작업을 실제로 참조하거나 실행할 때 설정을 적용하는 방식이다.
- 작업의 실행 시점에 설정이 적용되기 때문에 성능 최적화 측면에서 더 좋다.
결론적으로, 2번 방식이 성능 면에서 더 좋기 때문에 현재 더 권장된다고 한다!
728x90
'study > Server' 카테고리의 다른 글
[Database] 데이터베이스 Master-Slave 구조란? (0) | 2024.11.04 |
---|---|
Caddy로 도메인 없이 https 설정하기 (1) | 2024.09.07 |
HTTP 응답 헤더, Content-Disposition (0) | 2024.08.01 |
[error] Node.js Error <SyntaxError: Cannot use import statement outside a module> (0) | 2023.11.20 |