| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 클린코드
- DesignPattern
- 디자인패턴
- JavaScript
- 직장인점심
- 책너두
- 성수맛집
- 개발자
- IntelliJ
- Java
- JAVA개발자
- Linux
- 직장인
- 코딩
- 헤드퍼스트
- 객체지향프로그래밍
- 책읽기
- docker
- 독서
- 독서일지
- 성수
- 깨끗한코드
- 오브젝트
- 성수직장인
- 상속
- 성수볼거리
- 헤드퍼스트디자인패턴
- 성수핫플
- 주니어개발자
- 객체지향
- Today
- Total
런타임노트
[오류] Springboot 기동시 Failed to scan : FileNotFoundException *.j 본문
기존에 이클립스에서 Mybatis로 하던 프로젝트를 intelliJ에서 스프링부트, Gradle로 변경하는 과정에서 에러가 났다.
에러는 나지만, 프로그램은 돌아가는.. 상황이었고.
정확히는 FileNotFoundException이 아니고 그냥 Failed to scan 하고 [ 파일경로 ~~ .jar ] 하면서 jar 파일을 스캔할 수 없다는 에러 같아서 구글링해보다가 해결한 방법 기록~
WARNING: Failed to scan [file:/C:/Users/tester/.m2/repository/com/sun/xml/ws/jaxws-rt/2.1.7/jaxws-api.jar] from classloader hierarchy
java.io.FileNotFoundException: C:\Users\tester\.m2\repository\com\sun\xml\ws\jaxws-rt\2.1.7\jaxws-api.jar (The system cannot find the file specified)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.jar.JarFile.<init>(JarFile.java:166)
at java.util.jar.JarFile.<init>(JarFile.java:130)
at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60)
at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:48)
at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338)
at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288)
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262)
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104)
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
이런 오류메세지는 나왔지만 서버는 정상적으로 기동이 되었고 기능들도 문제없이 작동한다.
하지만 이런 오류가 찍혀 있으면 고갱님들의 비난을 피할수 없다.
오류내용을 보니 좀 이상했다. 왜 jaxws-rt/2.1.7 하위에서 jaxws-api.jar를 찾고 있는지.. 문제는 이것뿐만 아니라 이와 유사한 많은 jar 파일을 못찾는다고 나온다. 내가 직접적으로 이것들을 변경한것도 아닌데..
뭔가 순간적으로 꼬였나 하고 clean도 해보고 maven update도 해보고 local repository도 다 날려보고 했지만 결과는 달라지지 않았다. 찾아보니 IBM쪽에서 이런 현상에 대한 가이드가 나온것이 있었다.
Resolving The Problem
To prevent the java.io.FileNotFoundException, you can take one of the following actions:
- Edit the MANIFEST.MF file, and remove this line: Class-Path: pdq.jar
- Edit the context.xml file for Adobe Tomcat, and add an entry like the following one to set the value of scanClassPath to false: <JarScanner scanClassPath=”false” />
이렇게 하면 해결이 된다고 한다. 하지만 springboot의 embedded tomcat을 사용하니 위의 설정은 사용할 수 없고 application.yml 파일에서 다른 방법으로 설정할 수 있다.
application.yml
server:
tomcat:
additional-tld-skip-patterns: "*.jar"
이렇게만 넣어주면 관련 오류는 말끔히 사라진다.
또는 Config.java 에서
@Bean
public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
}
};
}
이렇게 처리를 할 수도 있고
Tomcat을 사용한다면 Context.xml 파일에서
<Context>
...
<JarScanner scanManifest="false"/>
...
</Context>
이렇게 처리를 해줄수도 있다고 한다.
끝!
'Spring' 카테고리의 다른 글
| [Spring] jwt (0) | 2023.11.24 |
|---|---|
| 캐시(Cache) 추상화와 사용법 (@Cacheable, @CachePut, @CacheEvict) (2) | 2023.05.04 |
| [Spring boot] Response 데이터 필터링하기 (@JsonIgnore, @JsonIgnoreProperties, @JsonFilter) (2) | 2023.04.28 |
| [MyBatis] useGeneratedKeys, keyProperty (2) | 2023.03.03 |