문제 해결

[문제해결] intellij-spring-maven 에서 swagger UI 실행하기 오류 해결

위시리 2025. 4. 3. 10:33

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에서:

  1. [View] -> [Tool Windows] -> [Maven] 열기
  2. 프로젝트 루트에서 우클릭 -> Reimport
  3. 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 입력하면 내 프로젝트가 뜨는 것을 확인할 수 있다.