[문제해결] intellij-spring-maven 에서 swagger UI 실행하기 오류 해결
swagger ui 를 사용하기 위해 maven dependency를 추가하고 오류 발생 및 해결 과정 정리
0. 버전
1. spring_maven 에서 swagger ui 를 사용하기 위해 maven.org에서 다음 dependency를 추가
https://central.sonatype.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui/overview
Maven Central: org.springdoc:springdoc-openapi-starter-webmvc-ui
Discover springdoc-openapi-starter-webmvc-ui in the org.springdoc namespace. Explore metadata, contributors, the Maven POM file, and more.
central.sonatype.com
springdoc-openapi-starter-webmvc-ui
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.6</version>
</dependency>
버전이 안맞아서 버전 부분을 지우고 입력했다.
2. 실행 - 에러
org.springdoc:springdoc-openapi-starter-webmvc-ui:jar:unknown was not found in
https://repo.maven.apache.org/maven2
during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of central has elapsed or updates are forced
Try to run Maven import with -U flag (force update snapshots)
dependency한 거를 찾지 못한다
3-1. 시도 1 (실패)
maven 업데이트
mvn clean install -U
3-2. 시도 2 (실패)
IntelliJ에서:
- [View] -> [Tool Windows] -> [Maven] 열기
- 프로젝트 루트에서 우클릭 -> Reimport
- Reimport 버튼 (Maven 패널의 🔄 아이콘) 클릭
3-3. 시도 3(실패)
아래 추가 repositories 추가해도 안됨
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
3-4. 시도 4(실패)
버전을 명시
<!-- swagger-->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.6</version>
</dependency>
다시 실행 했더니
[WARNING] The artifact mysql:mysql-connector-java:jar:8.0.33 has been relocated to com.mysql:mysql-connector-j:jar:8.0.33: MySQL Connector/J artifacts moved to reverse-DNS compliant Maven 2+ coordinates.
다른 경고가 떴다. 찾아 보니까 sql 관련 dependency가 특정 버전 이후에 바껴서 그걸 안바꿔주면 에러가 생길 수 있다고 해서
(이전)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
을
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
이렇게 수정
근데 그래도 에러 해결 안됨
3-5. 시도 5(성공)
원인
package com.example.boot_maven_jap_start_250402.s4interceptor.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor( new InterceptorWorker() )
.addPathPatterns("/itcp1")
.excludePathPatterns("/itcp2");
} // addInterceptors
@Override
protected void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
} // configureViewResolvers
} // class
위 코드에서 WebMvcConfigurationSupport가 application.properties보다 우선 적용되어 swagger가 걸리게 됨
따라서 다음 코드 추가
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/5.17.14/");
} // addResourceHandlers
최종 클래스 코드
package com.example.boot_maven_jap_start_250402.s4interceptor.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor( new InterceptorWorker() )
.addPathPatterns("/itcp1")
.excludePathPatterns("/itcp2");
} // addInterceptors
@Override
protected void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
} // configureViewResolvers
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/5.17.14/");
} // addResourceHandlers
} // class
dependency에서 swagger 2.6.0 버전으로 수정
<!-- swagger-->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>
4. 정상 실행
검색창에 /v3/api-docs 입력하면 내 프로젝트가 뜨는 것을 확인할 수 있다.