본문 바로가기

Web Dev

Java (Spring boot): Tomcat 에러 [The following method did not exist: org.apache.tomcat.util.modeler.Registry.disableRegistry()]

반응형

 

자바 스프링 부트 공부를 하는데 시작 부터 막힌다 계속 에러가 발생하는데 

이놈의 자바 에러는 콘솔창에 너무 장황하게 써 놔서 에당초 보기도 싫게 만든다. 

 

부트를 실행했을 때 나오는 에러다.

 

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.5)

2021-04-20 22:47:29.229  INFO 16316 --- [           main] com.example.demo.Ex06Application         : Starting Ex06Application using Java 15.0.2 on LAPTOP-0UD2CHLU with PID 16316 (C:\Users\ghwns\OneDrive\바탕 화면\개발언어\SpringWorkspace\EX06\bin\main started by ghwns in C:\Users\ghwns\OneDrive\바탕 화면\개발언어\SpringWorkspace\EX06)
2021-04-20 22:47:29.232  INFO 16316 --- [           main] com.example.demo.Ex06Application         : No active profile set, falling back to default profiles: default
2021-04-20 22:47:29.773  WARN 16316 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.NoSuchMethodError: 'void org.apache.tomcat.util.modeler.Registry.disableRegistry()'
2021-04-20 22:47:29.779  INFO 16316 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-04-20 22:47:29.792 ERROR 16316 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:183)

The following method did not exist:

    'void org.apache.tomcat.util.modeler.Registry.disableRegistry()'

The method's class, org.apache.tomcat.util.modeler.Registry, is available from the following locations:

    jar:file:/C:/Users/ghwns/.gradle/caches/modules-2/files-2.1/org.apache.tomcat.embed/tomcat-embed-core/8.5.38/485668675de7538c5f08c5050377297c93493b59/tomcat-embed-core-8.5.38.jar!/org/apache/tomcat/util/modeler/Registry.class

The class hierarchy was loaded from the following locations:

    org.apache.tomcat.util.modeler.Registry: file:/C:/Users/ghwns/.gradle/caches/modules-2/files-2.1/org.apache.tomcat.embed/tomcat-embed-core/8.5.38/485668675de7538c5f08c5050377297c93493b59/tomcat-embed-core-8.5.38.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of org.apache.tomcat.util.modeler.Registry

 

 

부트 프로젝트를 생성하고 아무 설정을 하지 않으면 기본적으로 내장된 톰캣 웹서버를 사용해 앱을 실행하게 되어 있다.

에러 문구를 한 줄씩 다시 한번 보면,

 

 

The following method did not exist:
    org.apache.tomcat.util.modeler.Registry.disableRegistry()V 
=> disableRegistry() 라는 메소드를 호출하지만 메소드가 없다.

 


The method's class, org.apache.tomcat.util.modeler.Registry, is available from the following locations: 
    jar:file:/Users/user/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/8.5.5/tomcat-embed-core-8.5.5.jar!/org/apache/tomcat/util/modeler/Registry.class 
=> 메소드가 있는 클래스는 Registry.class이며, 클래스의 위치이다.

 


The class hierarchy was loaded from the following locations: 
    org.apache.tomcat.util.modeler.Registry: file:/Users/user/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/8.5.5/tomcat-embed-core-8.5.5.jar

=> 클래스가 로드되는 라이브러리의 위치이다.


Action: 
    Correct the classpath of your application so that it contains a single, compatible version of org.apache.tomcat.util.modeler.Registry Process finished with exit code 0 

=> 클래스패스를 올바르게 명시하고, Registory 클래스의 적합한 버전을 써라.

 

즉, 현재 .m2에 설치된 내장 톰캣 라이브러리 버전이 8.5.5이고, 여기엔 org.apache.tomcat.util.modeler.Registry.disableRegistry() 라는 함수가 없다는거다.

스프링부트 2.4 버전을 사용하고 있다면 embeded tomcat 버전은 9 이상이어야 한다. 레파지토리 경로에 9.0.x 버전이 설치되었는지 확인해보고, 8.x 버전은 삭제한다.

 



출처: https://jolly-sally.tistory.com/52 [쓰기]

 

[SpringBoot] 스프링부트 실행 시 톰캣 에러 (내/외부 톰캣 사용 문제)

# 오류 2021-02-19 10:48:50.749 ERROR 26881 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Descripti..

jolly-sally.tistory.com

다행이 구글 신이 도움을 주셔서 무슨 내용인지는 파악을 했다.

항상 작업을 하면서 눈에 거슬리던게 하나가 있었다.

 

 

 

 

plugins {
	id 'org.springframework.boot' version '2.4.5'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
	id 'war'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}
ext['tomact.version'] = '8.5.38'

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	//Jsp 는 2가지를 추가해줘야함
	implementation 'javax.servlet:jstl'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' 
}

test {
	useJUnitPlatform()
}

 

 

ext['tomact.version'] = '8.5.38'

무작정 인강을 따라하다보니 이 톰켓 버전이 맞는지에 대한 부분이 항상 신경이쓰였는데 

귀찮아서 그냥 따라 쳤었다. 역시 이게 문제였다. 

그래서 우선 내가 무슨 톰켓 버전을 사용하고 있는지 확인하고자 했다 . 

윈도우를 쓰면 그냥 이 경로로 찾아 보자

C:\Users\ghwns\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.41

 

내꺼 9.0.41이다 

 

ext['tomact.version'] = '9.0.41'

이렇게 바꾸고 실행을 하니 

정상작동된다. 

마음이 아주아주 편안해진다. 또 이맛에 개발자하나보다 한다. 구글이 없으면 어떻게 살아갈꼬

 

 

반응형