
Published 2022. 12. 6. 20:21
현상
java.lang.ClassNotFoundException: # Licensed to the Apache Software Foundation (ASF) under one or more
컨트롤러에서 jsp 호출 시 위 에러 발생. 오류코드는 500.
대충 번역기 돌리면 "하나 이상의 Apache Software Foundation(ASF)에 라이센스 부여됨" 이라는 의미다.
로그를 찍어보니 컨트롤러는 정상적으로 호출되므로, jsp로 넘어가면서 어떤 문제가 발생했다고 볼 수 있다.
해결
아래 코드 처럼 maven 의존성에 provided 스코프 부분을 추가하여 해결했다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
원인
provided가 뭔지 찾아보고자 공식문서를 보면 다음과 같다.
this is much like compile, but indicates you expect the JDK or a container to provide it at runtime. It is only available on the compilation and test classpath, and is not transitive.
maven pom 공식문서 (들어가서 컨트롤 F -> provided)
쉽게 말해, 컴파일 시점에는 필요하나 런타임에서는 JDK 혹은 컨테이너가 제공하는 것들이다.
provided가 명시된 것들은 컴파일과 테스트 클래스패스 용도로 사용되고 이것들은 런타임 등 다른 곳으로 transitive 되지않는다.
이 것을 토대로 위 에러가 발생한 이유를 추측하자면, 컴파일 시 해당 의존성이 필요했지만, 런타임 진입 시 자동으로 제공되는 것이다.
그런데 provided를 명시하지 않아 런타임에서 이중으로 의존성이 부여되어 발생한 에러라는 것을 알 수 있다.
'자바' 카테고리의 다른 글
Gradle에서 라이브러리 의존관계 확인하기 (터미널 / 인텔리제이 ) (0) | 2022.08.30 |
---|---|
이클립스 lombok 라이브러리 적용/인식 안되는 오류 해결 (0) | 2022.08.12 |
[자바] lombok 라이브러리 - @Getter & @Setter (0) | 2022.08.03 |
[자바] 함수로 파일 경로 가져오기 (getContextPath & getRequestURI) (0) | 2022.07.30 |
[자바] 부분 배열의 합 중 가장 큰 값 구하기 (분할 정복 알고리즘) (0) | 2022.07.20 |