본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework/Spring boot

Gradle에서 Lombok이 포함된 프로젝트 export시 유의사항

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 4. 29.

 

 

롬북을 활용해서 코딩을 할 때 일반적으로 STS에서 Run을 실행하면 문제없이 선언한 에노테이션이 반응을 잘 한다. 그리고..Maven으로 만든 프로젝트에서도 export를 활용하여 war파일로 만들 때에도 롬북을 활용한 에노테이션이 마찬가지로 잘 되는 것 같았다.

그래서 Gradle로 만든 프로젝트를 export했는데 서비스로 선언한 클래스들이 null이 나오는 것 이였다.

@Autowire 에노테이션을 달아주면 문제없이 잘 되는데..그러면 롬북을 쓰는 의미가 없어서 삽질을 좀 하였다.

아무튼, 프로젝트를 Gradle이 포함된 형식으로 만들었다면, 따로 선언(?)을 안해주면 롬북으로 만든 에노테이션이 프로젝트 export를 하는 경우 포함되지 않아서...서비스가 null입니다...라는 당황스런 오류들을 보게 된다.

예를들어 아래코드를보면,

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import lombok.AllArgsConstructor;

@Service
@Transactional
@AllArgsConstructor   //요기..롬북꺼..null인객체를 조사해서 알아서 싱글톤으로 만들어준다.
public class SchedulerServiceImpl implements SchedulerService{
	private SchedulerMapper dao;

    ..이하 비지니스 메소드 및 로직
}

위 내용 처럼 롬북에서 제공하는 에노테이션을 사용해서 STS에서 RUN할때는 잘 되지만 WAR로 만든 경우에는 "해당 객체가 null인데요?" 라는 오류를 보게되는 것이다.

이를 해결하기 위해서는 build.gradle에 롬북 에노테이션을 써주세요~ 라는 설정을 추가해주면 된다.

dependencies {
    ..생략
	compileOnly 'org.projectlombok:lombok'  //컴파일 및 실행할 때 써주세요의 의미정도?
	annotationProcessor('org.projectlombok:lombok')  //에노테이션을 쓸 때 롬북도 봐라의 의미정도?
}

annotationProcessor가 없으면 롬북을 포함해서 프로젝트를 export할 때 롬북에서의 제공되는 에노테이션이 전부 포함되지 않으므로 주의하자.

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글