티스토리 뷰
Springboot 기동시 Failed to scan : FileNotFoundException *.jar 오류
호형 2020. 12. 10. 11:24프로젝트 변경사항이 있어서 BootApplication.java (springboot main class)의 위치를 변경하였다. 변경하고 나니 다음과 같은 오류가 발생을 했다.
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>
이렇게 처리를 해줄수도 있다고 한다.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot static resource ERR_ABORTED 404 오류 (1) | 2020.12.16 |
---|---|
java.lang.IllegalStateException: No thread-bound request found 오류 (0) | 2020.12.15 |
Springboot 기동시 The Class-Path manifest attribute 오류 (0) | 2020.12.09 |
Spring Property Value에 Multi Line, List, Array 입력하기 (0) | 2020.11.03 |
Springboot application.yml 파일의 값 가져오기 (feat. @Value is null) (3) | 2020.10.30 |