자바 빌드 툴은 Ant, Maven, Gradle이 있으며, Ant는 유연하지만 의존성 관리가 없고, Maven은 우수한 의존성 관리와 규칙 기반 라이프사이클을 제공하나 XML이 복잡하며, Gradle은 Groovy DSL 기반으로 Maven의 장점을 취하고 빠른 빌드 속도와 높은 유연성을 가집니다. 🛠️
발표자는 Maven에서 Gradle로 전환했으나, 최근 특정 문제로 인해 다시 Maven으로 돌아오게 되었습니다. 🔄
Gradle에서 Maven으로 돌아온 주된 계기는 'Jar-less POM' 문제였습니다. 이는 JAR 파일을 생성하지 않고 의존성만 명시하는 POM 파일(예: Spring Boot parent, GraalVM 관련 JS 라이브러리)을 Gradle이 커맨드 라인에서는 처리하지만, VS Code의 Java LSP 확장(Eclipse 기반)이 이를 빌드 파일로 인식하지 못해 IDE에서 오류를 발생시켰기 때문입니다. 🐛
GraalVM은 JDK 기반으로 특정 OS에 네이티브 실행 파일을 생성할 수 있는 JVM이며, React SSR 구현을 위해 사용되었고, Polyglot 기능의 JavaScript 엔진 활용을 위해 필수적이었습니다. 🚀
VS Code의 확장 문제로 인해 개발 환경에서 지속적인 에러가 발생했고, 이를 해결하기 위해서는 IntelliJ 구매 외에는 방법이 없다고 판단하여, 기존 개발 환경 유지를 위해 Gradle을 포기하고 Maven으로 회귀를 결정했습니다. 💻
Gradle에서 Maven으로 빌드 툴을 교체하는 과정은 Gradle 관련 파일 삭제, Maven Wrapper 파일 추가, build.gradle을 pom.xml로 변환(ChatGPT/Gemini 활용), 그리고 Maven 빌드 명령어 사용 및 'Jar-less POM'을 위한 <type>pom</type> 명시, 마지막으로 Git 캐시 삭제로 이루어집니다. ♻️
특히 'Jar-less POM'을 Maven에서 올바르게 처리하려면 해당 의존성에 <type>pom</type>을 명시하는 것이 중요합니다. 📝