Maven Scope 정리
pom.xml에서 상용되는 scope에 대한 정리
※compile
- 아무런 scope를 명시하지 않았을때 사용되는 기본값.
- 테스트 및 런타임에도 classpath에포함된다.
※provied
- JDK 또는 컨테이너에 의해서 runtime에 제공되는 모듈
- 이 scope는 이미 컨테이너가 해당 라이브러리를 제공하고 있을때 유용 그러므로 실제로 배포시에 제외대상
- 예를 들면 아래 servlet api의 경우 이미 웹서버에서 제공하고 있는 경우에 maven scope를 provied로 기재
1 2 3 4 5 6 | <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> | cs |
※runtime
- 런타임시 필요하지만 컴파일시에 필요하지 않는 경우에 사용
- 테스트와 런타임에는 사용 되지만 컴파일시에 사용 되지 않음
- 대표적 예로 JDBC Driver
1 2 3 4 5 6 | <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> <scope>runtime</scope> </dependency> | cs |
※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
'IT 지식 > 기타지식' 카테고리의 다른 글
간단한 카카오 챗봇 만들기 (1) | 2018.10.06 |
---|---|
Fake SMTP로 메일 전송 테스트 (0) | 2018.10.04 |
Maven 프로젝트를 Gradle로 변경 (0) | 2018.08.05 |
Mac에서 일반 키보드 연결시 Home/End 버튼 사용방법 (5) | 2018.06.16 |
Tistory 외부 Editor API Tistory Editor 사용후기 (0) | 2018.06.15 |