java 프로젝트를 보다보면 Build 도구가 제각각인 경우가 있다. 나도 maven을 주로 사용해왔지만, gradle과 무슨 차이가 있는지 궁금하여 gradle을 적용해서 사용해보기로 한다.
Google Trends 에는 대략 2010년 이 후로 gradle의 검색량이 늘었지만, maven을 이기지는 못하는 듯하다. 그래도 Go~
Gradle 설치하기
아래 홈페이지에서 다운로드를 받고 아래와 같이 설치를 진행.
https://docs.gradle.org/current/userguide/installation.html#ex-installing-with-a-package-manager
➜ ~ sudo mkdir /Users/joonhopark/Tool/gradle
➜ Downloads sudo unzip gradle-8.7-bin.zip -d /Users/joonhopark/Tool/gradle
Archive: gradle-8.7-bin.zip
creating: /Users/joonhopark/Tool/gradle/gradle-8.7/
inflating: /Users/joonhopark/Tool/gradle/gradle-8.7/LICENSE
inflating: /Users/joonhopark/Tool/gradle/gradle-8.7/NOTICE
..생략..
PATH 지정
#gradle
export GRADLE_HOME=/Users/joonhopark/Tool/gradle/gradle-8.7
export PATH=$GRADLE_HOME/bin:$PATH
설치 확인
➜ ~ gradle -v
Welcome to Gradle 8.7!
Here are the highlights of this release:
- Compiling and testing with Java 22
- Cacheable Groovy script compilation
- New methods in lazy collection properties
For more details see https://docs.gradle.org/8.7/release-notes.html
------------------------------------------------------------
Gradle 8.7
------------------------------------------------------------
Build time: 2024-03-22 15:52:46 UTC
Revision: 650af14d7653aa949fce5e886e685efc9cf97c10
Kotlin: 1.9.22
Groovy: 3.0.17
Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM: 17 (Oracle Corporation 17+35-2724)
OS: Mac OS X 14.2.1 x86_64
Project 적용
spring initializr 에서 Project를 Gradle로 지정하고 생성하게 되면, gradle 관련된 폴더나 설정 파일들의 위치를 대략적으로 확인이 가능하다. (그나저나 요즘은 Gradle이 Default 지정되어 점점 보편화되지 않을까 기대가 된다.)
https://start.spring.io/
기존 프로젝트에 gradle을 적용할 때, 대략적인 수정사항은 아래와 같다.
/gradle/gradle-wrapper.jar
/gradle/gradle-wrapper.properties
/gradlew
/gradlew.bat
/build.gradle
build.gradle 파일의 경우, maven의 pom.xml과 같이 설정을 잡아줘야하는데, ChatGPT에게 pom.xml 파일을 주고 build.gradle 파일로 변환해달라고 하면 간단히 작성 가능하다.(좋은 세상..)
commit 내역이 깔끔하진 않지만, 적용한 내용의 상세가 궁금하면 아래 참고.
https://github.com/mango-park/eureka/commit/d728ae51f04b4a54bc5c00fcc512c15c82d5951e
점검
간단한 spring-boot 프로젝트를 mvn(Apache Maven 3.9.6)과 gradle(Gradle 8.7)로 Build한 결과는 아래와 같다. 프로젝트의 의존성이 많아지면 격차가 어떻게 될지는 나중에 비교해봐야겠다. 우선 Gradle 승!
➜ eureka (main) ✗ mvn clean install -DskipTests
[INFO] Scanning for projects...
..생략..
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.567 s
[INFO] Finished at: 2024-04-25T12:18:31+09:00
[INFO] ------------------------------------------------------------------------
➜ eureka (main) ✗ mvn clean install -DskipTests
[INFO] Scanning for projects...
..생략..
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.590 s
[INFO] Finished at: 2024-04-25T12:18:36+09:00
[INFO] ------------------------------------------------------------------------
➜ eureka (main) ✗ mvn clean install -DskipTests
[INFO] Scanning for projects...
..생략..
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.487 s
[INFO] Finished at: 2024-04-25T12:18:41+09:00
[INFO] ------------------------------------------------------------------------
➜ eureka (main) ✗ gradle clean build -x test
BUILD SUCCESSFUL in 1s
6 actionable tasks: 6 executed
➜ eureka (main) ✗ gradle clean build -x test
BUILD SUCCESSFUL in 1s
6 actionable tasks: 6 executed
➜ eureka (main) ✗ gradle clean build -x test
BUILD SUCCESSFUL in 1s
6 actionable tasks: 6 executed
결론
개발자의 시간은 소중하다. 다음부터는 Build 도구를 가급적 gradle로 잡고 프로젝트를 진행하는 것도 괜찮을 듯 하다. 참고로 jar 파일 생성이 필요없을 때는 'bootJar' task의 enabled를 false로 하면 조금 더 쾌적한 로컬환경 빌드가 가능하다.
'Engineering > DevOps' 카테고리의 다른 글
[minikube] 형상관리(Gitea) 설치 (0) | 2025.01.03 |
---|---|
Tekton 설치(minikube) (0) | 2024.06.11 |
Grafana 설치 (kubernetes/aws) (0) | 2024.03.21 |
Prometheus 설치 (kubernetes/aws) (0) | 2024.03.20 |
npm package Nexus bulk upload (0) | 2023.08.30 |