롬북을 활용해서 코딩을 할 때 일반적으로 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할 때 롬북에서의 제공되는 에노테이션이 전부 포함되지 않으므로 주의하자.
반응형
'Spring framework > Spring boot' 카테고리의 다른 글
Spring boot 인터셉터, Spring boot Interceptor, 스프링부트 인터셉터 (0) | 2019.12.02 |
---|---|
STS git 추가, STS 깃 연동, STS 리눅스 git 서버 연동 (0) | 2019.11.12 |
Spring boot maven 빌드, Spring boot maven export (0) | 2019.11.11 |
Spring boot 웹 필터 적용 (0) | 2019.04.30 |
STS 버전 4.2.0에서의 스프링부트 시작 및 빌드하기 (0) | 2019.04.29 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글