티스토리 뷰

프로젝트 변경사항이 있어서 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>

이렇게 처리를 해줄수도 있다고 한다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/12   »
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
29 30 31