자바 스프링 부트 공부를 하는데 시작 부터 막힌다 계속 에러가 발생하는데
이놈의 자바 에러는 콘솔창에 너무 장황하게 써 놔서 에당초 보기도 싫게 만든다.
부트를 실행했을 때 나오는 에러다.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: 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 [쓰기]
다행이 구글 신이 도움을 주셔서 무슨 내용인지는 파악을 했다.
항상 작업을 하면서 눈에 거슬리던게 하나가 있었다.
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'
이렇게 바꾸고 실행을 하니
정상작동된다.
마음이 아주아주 편안해진다. 또 이맛에 개발자하나보다 한다. 구글이 없으면 어떻게 살아갈꼬
'Web Dev' 카테고리의 다른 글
CSS : <div class="overflow-hidden ..."></div> overflow-hidden 이 뭐지 ? (0) | 2023.06.22 |
---|---|
Netlify 에 React.js Web 웹페이지 Deploy 배포 하는 방법 쉬워요! (0) | 2023.06.16 |
JAVA 백엔드 api 자동 등록방지 코드 음성 출력 코딩 (0) | 2023.06.15 |
nodejs file list in directory - 파일 리스트를 어떻게 노드 js로 가져 오나? (1) | 2023.05.24 |
pm2 어떻게 쓰는지 모르면 이렇게 쓰면 될 것 같습니다. (0) | 2023.03.28 |
Docker Build Run 전문적인 Dockerfile 노하우 작성법 (0) | 2023.03.23 |