Gradle 빌드시 Cannot find symbol 오류가 발생하는 원인에 대해 알아봅니다.

** Actual and formal argument lists differ in length 오류도 동일한 원인입니다.

 

 

 

1. 현상.

 

일반적으로 Gradle을 빌드 시스템으로 채용해도 추가 라이브러리는 Maven Repository에서 검색해 추가하게 됩니다. 이제 여기서 Lombok을 검색해 build.gradle에 추가해 봅시다.

 

 

 

이제 빌드를 하면 오류가 발생합니다.

 

 

 

 

2. 수정.

 

먼저 IntelliJ 설정에서 Enable Annotation Processor 항목을 활성화합니다.

 

 

다음으로 build.gradle로 이동해 Lombok에 annotationProcessor 항목을 추가합니다.

 

 

이제 빌드를 수행하면 정상적으로 동작합니다.

 

 

 

 

 

반응형

 

 

자바 빌드 시스템에 대해 알아봅니다.

 

 

 

1. Maven

 

 

전통적인 빌드 툴입니다. 시작은 Apache ANT의 대안으로 시작되었으며 자바 프로젝트의 전체적인 관리를 가능하게 함과 동시에 많은 편리함과 이점을 제공해 줘 널리 사용되었습니다.

 

Project Object Model을 관리하는 pom.xml 파일을 사용하며 개발자가 해당 파일에 사용할 라이브러리를 정의해 두면 정의된 라이브러리뿐 아니라 그 라이브러리를 사용하는데 필요한 종속된 다른 라이브러리까지 관리해 자동으로 다운로드하여 사용할 수 있게 해 줍니다.

 

빌드 동작 방식이 미리 정해져 있으며 라이프사이클에 의해 순서에 맞게 동작합니다. Maven의 라이프사이클까지 자세히 다루진 않습니다.

 

 

 

2. Gradle

 

 

Gradle 역시 빌드 툴입니다. Maven 보다 늦게 출발한 후발주자입니다. Gradle은 기존 ANT와 Groovy기반으로 구축되어 기존의 ANT 역할과 배포 기능 모두 지원합니다.

 

Gradle은 늦게 만들어진 만큼 Maven에 비해 더 나은 사용성과 성능을 제공하고 있습니다. 안드로이드 앱의 공식 빌드 시스템이기도 하며 Java, C/C++, Python 등 다양한 언어에 대한 빌드를 지원하고 있습니다.

 

Maven과 달리 build.gradle 파일을 사용하며 Maven과 동일하게 개발자가 사용할 라이브러리를 정의해 둘 수 있습니다. Gradle 역시 정의된 라이브러리뿐 아니라 그 라이브러리를 사용하는데 필요한 종속된 다른 라이브러리까지 관리해 자동으로 다운로드하여 사용할 수 있게 해 줍니다.

 

 

 

3. Maven vs Gradle

 

사실 두 빌드 시스템은 자주 비교되곤 합니다. 성능과 편의성면에서는 당연히 Gradle의 우세입니다. 나중에 나왔으니 기존 Maven 보다 더 좋게 차별점을 두는 게 당연합니다.

 

당장 라이브러리를 관리하는 것만 봐도 그렇습니다. Maven의 경우 xml로 관리하고 Gradle의 경우 Groovy를 사용해 라이브러리가 많아질수록 관리적 측면과 가독성만 해도 엄청나게 차이 날게 뻔합니다. 심지어 Groovy를 사용해 개발자가 직접 스크립트를 작성해 빌드를 커스텀할 수도 있고 플러그인을 호출할 수도 있습니다.

 

 

성능면에서도 많이 차이가 납니다. 클린 상태에서 빌드도 거의 두배 가량 차이나고 심지어 캐싱된 상태에서는 최대 100배까지 차이가 납니다.

 

다른 다양한 이점도 있지만 여기까지만 들어도 모두가 다 Gradle을 사용하겠구나 생각할 수도 있습니다만 사실 Maven을 더 많이 사용한다고 합니다.

 

 

많은 사람들이 익숙함과 Groovy를 배워야 한다는 생각에 Maven을 사용하고 있을 수도 있습니다. 물론 개발자 포럼에 공유되어 있는 코드가 Maven으로 작성되어 있어서 빠르게 적용하기 위해서 그럴 수도 있습니다. 아니면 회사에서 사용하고 있던 제품 프로젝트의 빌드 시스템이 Maven으로 설정되어 있어서 그럴 수도 있고요.

 

하지만 아무리 생각해봐도 이제 더 이상 Maven을 고집할 이유는 모르겠습니다. 이미 사내에서 관리되고 있는 프로젝트가 아니라면 포럼이나 학습서에 Maven으로 작성되어 있어도 Gradle로 직접 바꿔서 시도해보는 것이 좋다고 생각합니다.

 

 

 

4. IntelliJ

 

 

IntelliJ를 IDE로 사용하고 새로운 Java 프로젝트를 생성할 때 보면 Build System에 Maven과 Gradle보다 IntelliJ라는 항목이 먼저 보였던 것을 기억하나요?

 

 

사실 앞서 다룬 내용처럼 대부분의 사용자는 Maven을 사용할 테고 다시 그 나머지 사용자의 대부분은 Gradle을 사용할 거로 생각합니다. StackOverflow와 같은 사이트를 보면 종종 IntelliJ에 관한 질문이 있긴 합니다. 결론은 "IntelliJ에서 제공해주는 독자적인 빌드 방식"입니다.

 

IntelliJ 빌드 시스템은 IntelliJ의 자체 빌드 메커니즘으로 단순하게 프로젝트의 모든 수정 내용과 종속 파일을 컴파일하는 기능입니다. 여기서 문제는 수정 내용과 종속된 파일만 빌드한다는데 있습니다. 안타깝게도 Maven과 Gradle과 달리 순수하게 빌드를 수행합니다. 그로 인해 아티팩트 생성, 리포지토리 배포, CodeGen과 같은 다른 작업을 수행하지 않습니다.  

 

위와 같은 이유로 인해 대부분의 개발자들은 Maven과 Gradle과 같은 빌드 툴을 사용합니다. 심지어 이 두 툴은 잘 사용한다면 개발자가 직접 지정한 빌드 구성을 설정할 수도 있습니다.

 

 

 

5. References

 

 

 

 

 

 

반응형

 

 

Java에서 Actual and formal argument lists differ in length 에러가 발생한 경우 해결 방법에 대해 알아봅니다.

 

 

 

1. 어노테이션 처리 활성화 

 

 

IntellJ의 설정 > 빌드, 실행, 배포 > 어노테이션 프로세서 > 어노테이션 처리 활성화를 체크 해 줍니다.

 

 

 

2. Lombok Gradle 디펜던시 확인.

 

스프링 부트 설정에서 Lombok을 추가한 경우 build.gradle에 Lombok이 다음과 같이 추가되어 있는 경우가 있습니다.

 

 

이 경우 위와 같은 에러가 발생할 수 있으니 Maven Repository로 이동해 Lombok을 검색해 다음과 같이 변경해 줍시다.

 

 

 

 

3. Gradle 설정 변경

 

IntelliJ의 설정 > 빌드, 실행, 배포 > 빌드 도구 > Gradle로 이동해 다음과 같이 설정을 변경하고 저장해준다.

 

 

 

이제 빌드하면 정상적으로 빌드 되는것을 확인할 수 있습니다.

 

 

 

 

 

반응형

'Programming > JAVA' 카테고리의 다른 글

[Lombok] Gradle 빌드시 Cannot find symbol 오류  (0) 2022.06.30

본 글은 다음 글을 번역한 글입니다: The 2021 Web Development (Frontend + Backend) RoadMap

 

The 2021 Web Development (Frontend + Backend) RoadMap

An illustrated guide to becoming a Web Developer with links to relevant courses

dev.to

 

 

 

https://medium.com/@digitalact/2020-front-end-web-developer-road-map-ed3fcdec1c14

 

목차

 

  1. 2021/01/15 - [Programming] - 2021년 웹 개발 로드 맵 - 모든 개발자가 배워야 할 8가지.
  2. 2021/01/15 - [Programming] - 2021년 웹 개발 로드 맵 - 프런트엔드
  3. [현재 글] 2021년 웹 개발 로드 맵 - 백엔드

 

 

 

2021 백엔드 개발자 로드맵

 

2021년에 백엔드 개발자가 되고 싶다면 다음의 백엔드 개발자 로드맵을 따를 수 있습니다. 다시 말하지만 강조된 노란 박스의 핵심 기술들로부터 시작하고 거기서 성장해 나갈 수 있습니다. 

 

로드맵 아래에는 학습에 도움이 되는 몇 가지 보충 자료와 강의, 책의 링크가 있습니다. 유료 강의를 구입한다면 할인을 받을 수도 있습니다.

 

https://github.com/kamranahmedse/developer-roadmap/blob/master/img/backend.png?year-2021-2

 

1. Node.js

 

 

자바와 스프링 또는 파이썬과 장고를 사용하는 것처럼 웹 애플리케이션의 백엔드를 개발하기 위한 많은 선택사항이 있지만 최근에는 Node.js가 선호되는 옵션으로 등장했습니다.

 

NodeJS의 가장 좋은 점은 단 하나의 프로그래밍 언어인 자바스크립트를 사용해 완전한 웹 애플리케이션을 개발할 수 있다는 것입니다.

 

만약 Node 루트로 가고 싶다면 Rob Percival과 Andrew Mead의 "The Complete Node.js Developer course"부터 시작하는 것이 좋습니다.

 

 

2. 자바

 

 

저는 주로 웹 개발 및 기다 프로그래밍 언어를 배운 자바 개발자이므로 백엔드 개발과 관련하여 선호하는 선택은 자바입니다 Core Java 또는 Jaba + Spring Boot를 사용하여 최첨단 고성능 백엔드를 만들 수 있습니다. 자바와 스프링 루트로 가고 싶다면 참여할 수 있는 몇 가지 강의가 있습니다.

  1. The Complete Java Masterclass
  2. Spring Framework 5: Beginner to Guru

 

 

3. 파이썬

 

 

파이썬은 강력한 프레임 워크와 라이브러리로 가득 찬 또 다른 멋진 언어입니다. 파이썬을 사용하여 백엔드를 개발하여는 경우 파이썬 프로그래머를 위한 풀 스택 웹 개발 프레임워크인 장고를 사용할 수 있습니다. 파이썬을 시작하기 위한 파이썬과 장고를 배울 수 있는 몇 가지 강의가 있습니다:

  1. The Complete Python Bootcamp
  2. Python and Django Full Statck Web Developer Bootcamp.

 

 

4. 루비

 

 

루비는 웹 개발에 완벽한 또 다른 강력한 언어입니다. 웹 애플리케이션을 정말 쉽고 빠르게 만들 수 있는 Rails라는 훌륭한 프레임워크가 있습니다. 루비로 시작하고 싶다면 Udemy의 "The Complete Ruby on Rails Developer Course"를 확인하세요.

 

최고의 리소스 중 하나이며 만약 더 많은 선택이 필요하고 무료 리소스를 통해 배우는 것을 꺼리지 않는다면 무료 루비 및 Rails 강좌를 살펴볼 수 있습니다.

 

 

5. PHP와 MySQL

 

 

사람들이 PHP에 대해 부정적인 말을 하는 것은 잊어버리세요. 여전히 서버 측 코드를 작성하는 가장 쉬운 방법이며 인터넷 상의 거의 50%가 PHP와 MySQL 스택에서 실행됩니다.

 

PHP 학습에 관심이 있는 경우 Udemy에서 초보자를 위한 PHP를 위한 강의를 확인할 수 있습니다. 더 많은 선택 사항과 무료 리소스가 필요한 경우 시작할 수 있는 무료 PHP와 MySQL 코스 목록을 확인할 수도 있습니다.

 

 

이것이 2021년에 웹 개발자를 시작하는 방법에 대한 모든 것입니다. 이 자료는 항상 원했던 웹 개발자가 되기 위한 몇 가지 경로를 강조하기 때문에 웹 개발자를 시작하기에 좋은 리소스입니다.

 

하지만 어딘가에 막혀있고 혼동이 있는 경우 언제든지 여기에 질문할 수 있으며 가능한 한 최선을 다해 답변해 드릴 것입니다. 

 

프로그래밍 세계가 처음이라면 이 로드맵과 많은 기술이 당신을 겁나게 만들지 마세요. 이는 지침일 뿐이며 웹 개발을 배우고 웹 개발자가 되기 위해 다른 루트를 선택할 수도 있습니다. 여러분은 원하는 경로를 선택하고 그에 충실하면 됩니다.

 

 

 

맺는말

 

지금까지 이 글을 읽어 주셔서 감사합니다. 배워야 할 것이 너무 많고 참여할 강의가 너무 많다고 생각할 수도 있지만 걱정할 필요는 없습니다. 대부분의 내용은 이미 알고 있을 가능성이 높으며 사용할 수 있는 유용한 무료 리소스도 많이 있습니다. 여기저기서 모든 것이 무료는 아니지만 그만큼 가치가 있는 최고의 리소스와 함께 연결해 두었습니다.

 

저는 Udemy 강좌의 특별한 팬입니다. 강좌를 구입하면 돈을 받는 것 때문이 아니라 매우 저렴하고 아주 적은 금액으로 많은 가치를 제공해 주는 강좌를 원하는 대로 자유롭게 선택할 수 있기 때문입니다.

 

하루하루 끝날 때마다 여기에 언급된 내용에 대하여 충분한 지식과 경험을 쌓아야 합니다. 웹 개발 여정에 행운을 빕니다. 확실히 쉽지는 않겠지만 이 로드맵과 가이드를 따르면 웹 개발자가 되는데 한걸음 더 가까워질 겁니다.

 

웹 개발 여정에 최선을 다하고 멋진 콘텐츠를 제작 한 Kamran Ahmed에게 큰 감사를 드립니다.

 

 

 

 

 

반응형

+ Recent posts