문제점해결

[해결중..]타일즈 적용 시 noclassdeffounderror

예쁜꽃이피었으면 2023. 2. 23. 08:56

타일즈 적용하고 운영에 반영하면..오류가 난다.

(정확하게는 운영반영 전에 개발톰캣에 호스트 추가하여 접근 시)

https://coding-leaf.tistory.com/75

 

java.lang.NoClassDefFoundError 에러

java project를 진행하던 중에 외부 라이브러리를 제대로 받아오지 못하는 문제가 발생했다. 외부 라이브러리를 추가해주어도 에러가 났다. 에러 코드는 다음과 같았다. ERROR: org.springframework.schedulin

coding-leaf.tistory.com

 

https://nhj12311.tistory.com/84

 

java.lang.NoClassDefFoundError 에러 해결 방법

얼마 전 업무를 하다 java.lang.NoClassDefFoundError 를 만났는데 상당수 ClassNotFoundException와 헷갈리는 부분이 있을 것 같다. 과거에도 이 에러를 많이 만났지만 그때마다 어찌저찌 해결만 했을 뿐 명확

nhj12311.tistory.com

 

위 블로그에 보면

컴파일 환경에서는 클래스가 참조되었지만 실행 환경에서는 해당 클래스를 찾을 수 없는 경우 발생한다.

그래서 코딩을 할 때는 아무 문제가 없다가 spring boot나 was로 실행 시 만나는 문제..

아니면 서버에 반영했을 때 만나는 문제로..

 

프로젝트 > 프로퍼티 > Deployment Assembly > 메이븐 등록 (해당 라이브러리 등록)

하면 된다고 하는데..

톰캣에도 jar추가하고

위에 위치에도 추가하고..

뭐 이리저리 다 추가해도 계속 에러가 난다...................

 

jar는 있지만 jar버전이 다르거나..

보니까.. 스프링 버전, 자바 버전.. 다 맞아야 한다는데..

뭘까..........................................................힘들다

 

 

 

개인적으로 Maven을 즐겨 쓰는데 NoClassDefFoundError가 발생하면 의존하는 라이브러리의 버전이 서로 맞지 않아 발생하는 경우가 대부분이었다.. 라는데..

 

 

 

 

[2023-02-27 추가]

1. 타일즈 버전를 3.0.8 -> 3.0.3으로 변경 
2. 스프링 버전를 4.3.9로 변경
=> 
타일즈 버전 : 3.0.3 | 3.0.5 |  3.0.8
스프링 버전 : 3.1.1 |  4.3.4 | 4.3.6 | 4.3.9 | 5.0.7
이거 다 수정하면서 했었는데 뭔가 안 맞았었나보다.  

그리고 나는 어.. 톰캣 server.xml에 호스트를 추가해서 외부에서도 도메인주소로 접근가능하게 해야 했기 때문에
톰캣 lib에 못찾겠다는 jar들 다 넣음.. '-'

3. pom.xml에 넣은 타일즈 관련 디펜던시
- tiles-core 3.0.3
- tiles-jsp 3.0.3
- tiles-servlet 3.0.3
- tiles-request-servlet 1.6
- tiles-api 3.0.3
- commons-beanutils 1.8.0
- commons-digester 2.0
- commons-logging

흠.. 그런데.. 아마 지금 이클립스 있는 서버에서만 이렇게 해야 했던 것 같고..
그냥 내 개인 PC에서는 이렇게 까지 안해도 됐었는데.. 어떤 환경이 다른 가보다..


 


 


이것 저것 수정해서

지금 나고 있는 에러는

java.lang.NoClassDefFoundError : org/springframework/web/servlet/view/tiles3/SpringWildcardServeltTilesApplicationContext

 

https://tiles.apache.org/2.1/framework/tutorial/wildcard-configuration.html

 

1. 

XML 정의 파일에서 와일드카드를 사용하려면 클래스 경로에 다음 라이브러리를 넣어야 합니다.

  • 스프링 코어.jar
  • 봄 웹.jar
  • 스프링 컨텍스트.jar
  • spring-beans.jar
  • aopalliance.jar

 

Maven을 사용하는 경우 spring-web 패키지에 의존하기만 하면 됩니다.

=> 흠..안되는데

 

 

2. 나는 톰캣에서만 실행할거니까.........

톰캣 실행 순서 찾아보자 

https://bigfat.tistory.com/66

1. 톰캣 서버가 실행되면 서버는 server.xml을 읽는다. -> 문제없음

2. 서버가 프로젝트의 web.xml을 읽는다

-> servlet-context.xml경로 설정되어 있고

타일즈 설정 <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> .. 이게 있는데

tilesConfigurer이름의 빈을 생성하는데 에러가 있다고 나오고

java.lang.NoClassDefFoundError : org/springframework/web/servlet/view/tiles3/SpringWildcardServletTilesApplicationContext라는 에러남.근데 SpringWildcardServletTilesApplicationContextspring-webmvc-4.3.9.jar에 있어..

 

 

 

메이븐에 

spring-webmvc 랑

spring-web 둘다 넣어봄..


springwildcardservlettilesapplicationcontext 이거 못찾는다는 에러가 계속 나는데

 

 

 

NoClassDefFoundError means class is found at compile time but not at run time, so it's thrown by JRE.

In your case problem is about the tilesConfigurer bean not about the SpringWildcardServletTilesApplicationContext class. Make sure bean's all superclasses and dependent jars of these superclasses are included.

Also you can check classpath with SystemClassLoader.

About tilesConfigurer.

 

클래스 패스를 체크해라.. ..

 

 

https://stackoverflow.com/questions/14843670/integrating-spring-3-and-tiles-3-noclassdeffounderror

반응형