Maven Scope 정리
pom.xml에서 상용되는 scope에 대한 정리
※compile
- 아무런 scope를 명시하지 않았을때 사용되는 기본값.
- 테스트 및 런타임에도 classpath에포함된다.
※provied
- JDK 또는 컨테이너에 의해서 runtime에 제공되는 모듈
- 이 scope는 이미 컨테이너가 해당 라이브러리를 제공하고 있을때 유용 그러므로 실제로 배포시에 제외대상
- 예를 들면 아래 servlet api의 경우 이미 웹서버에서 제공하고 있는 경우에 maven scope를 provied로 기재
※runtime
- 런타임시 필요하지만 컴파일시에 필요하지 않는 경우에 사용
- 테스트와 런타임에는 사용 되지만 컴파일시에 사용 되지 않음
- 대표적 예로 JDBC Driver
※test
- 테스트 코드 컴파일시 필요, 배포시 제외
참고
https://www.baeldung.com/maven-dependency-scopes
Scope를 Provided로 지정했을때 문제사례
인텔리제이에서 간단한 spring project를 만들고 실행시킬때 NoClassDefFoundError: javax/servlet/Filter 에러가 발생했다.
그 이유를 구글링해서 확인해보니 실행시 사용할 spring-boot-starter-tomcat의 스코프를 provided로 지정해서 에러가 발생했다. 스코프를 지워서 default인 compile로 사용하지 정상적으로 동작했다.
https://stackoverflow.com/questions/31494183/getting-a-caused-by-java-lang-noclassdeffounderror-javax-servlet-http-httpser
'JAVA > Java' 카테고리의 다른 글
[스프링부트] jar, war 내에서 ResourceUtil.getFile() 사용시 FileNotFoundException 발생 (0) | 2019.10.23 |
---|---|
Spring Boot 와 Docker (0) | 2019.10.21 |
Intellij 설정파일 (0) | 2019.09.24 |
JXLS, POI JAVA에서 Excel 사용하는 구현 방법 및 종류 비교 (0) | 2019.08.19 |
Intellij Git 쉽게 사용하기!!! (0) | 2019.08.16 |