Failed to scan [file:/home/tomcat/7.0/lib/._annotations-api.jar] from classloader hierarchy 와 같이 ._* 파일에 대하여 오류가 발생하는 경우가 있습니다. 

6월 15, 2014 10:21:54 오후 org.apache.catalina.core.AprLifecycleListener init
정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/appsroot/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
6월 15, 2014 10:21:55 오후 org.apache.coyote.AbstractProtocol init
정보: Initializing ProtocolHandler ["http-bio-8080"]
6월 15, 2014 10:21:55 오후 org.apache.coyote.AbstractProtocol init
정보: Initializing ProtocolHandler ["ajp-bio-8009"]
6월 15, 2014 10:21:55 오후 org.apache.catalina.startup.Catalina load
정보: Initialization processed in 935 ms
6월 15, 2014 10:21:55 오후 org.apache.catalina.core.StandardService startInternal
정보: Starting service Catalina
6월 15, 2014 10:21:55 오후 org.apache.catalina.core.StandardEngine startInternal
정보: Starting Servlet Engine: Apache Tomcat/7.0.54
6월 15, 2014 10:21:55 오후 org.apache.catalina.startup.HostConfig deployDirectory
정보: Deploying web application directory /home/tomcat/7.0/servers/jins_8080/webapps/ROOT
6월 15, 2014 10:21:55 오후 org.apache.tomcat.util.scan.StandardJarScanner scan
경고: Failed to scan [file:/home/tomcat/7.0/lib/._annotations-api.jar] from classloader hierarchy
java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.(ZipFile.java:215)
        at java.util.zip.ZipFile.(ZipFile.java:145)
        at java.util.jar.JarFile.(JarFile.java:153)
        at java.util.jar.JarFile.(JarFile.java:90)
        at sun.net.www.protocol.jar.URLJarFile.(URLJarFile.java:93)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
        at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:99)
        at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
        at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89)
        at org.apache.tomcat.util.scan.FileUrlJar.(FileUrlJar.java:41)
        at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:34)
        at org.apache.catalina.startup.ContextConfig$FragmentJarScannerCallback.scan(ContextConfig.java:2615)
        at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:258)
        at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:220)
        at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:1871)
        at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1259)
        at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:876)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:374)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1247)
        at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1898)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)

6월 15, 2014 10:21:55 오후 org.apache.tomcat.util.scan.StandardJarScanner scan
경고: Failed to scan [file:/home/tomcat/7.0/lib/._catalina-ant.jar] from classloader hierarchy
java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.(ZipFile.java:215)
        at java.util.zip.ZipFile.(ZipFile.java:145)
        at java.util.jar.JarFile.(JarFile.java:153)
...

이후에 엄청난 메세지들이 계속 나옵니다. 이상하지요? /home/tomcat/7.0/lib 디렉토리에 쓰기 권한 등 특별한 문제도 없는데 말입니다. 파일은 이렇게들 잘 있구요.

appsroot:lib appsroot$ ls -tlra
total 17152
drwxrwxrwx@ 1 appsroot  staff   131072  5 20 04:33 .
drwxrwxrwx  1 appsroot  staff   131072  6 15 22:02 ..
-rwxrwxrwx  1 appsroot  staff    53445  6 15 22:02 catalina-ant.jar
-rwxrwxrwx  1 appsroot  staff    15978  6 15 22:02 annotations-api.jar
-rwxrwxrwx  1 appsroot  staff   132895  6 15 22:02 catalina-ha.jar
-rwxrwxrwx  1 appsroot  staff   256780  6 15 22:02 catalina-tribes.jar
-rwxrwxrwx  1 appsroot  staff  1594036  6 15 22:02 catalina.jar
-rwxrwxrwx  1 appsroot  staff  2272697  6 15 22:02 ecj-P20140317-1600.jar
-rwxrwxrwx  1 appsroot  staff    55426  6 15 22:02 el-api.jar
-rwxrwxrwx  1 appsroot  staff   124147  6 15 22:02 jasper-el.jar
-rwxrwxrwx  1 appsroot  staff   602132  6 15 22:02 jasper.jar
-rwxrwxrwx  1 appsroot  staff    87808  6 15 22:02 jsp-api.jar
-rwxrwxrwx  1 appsroot  staff   197876  6 15 22:02 servlet-api.jar
-rwxrwxrwx  1 appsroot  staff     6142  6 15 22:02 tomcat-api.jar
-rwxrwxrwx  1 appsroot  staff   828251  6 15 22:02 tomcat-coyote.jar
-rwxrwxrwx  1 appsroot  staff   234042  6 15 22:02 tomcat-dbcp.jar
-rwxrwxrwx  1 appsroot  staff    71913  6 15 22:02 tomcat-i18n-es.jar
-rwxrwxrwx  1 appsroot  staff    43799  6 15 22:02 tomcat-i18n-fr.jar
-rwxrwxrwx  1 appsroot  staff    47037  6 15 22:02 tomcat-i18n-ja.jar
-rwxrwxrwx  1 appsroot  staff   125457  6 15 22:02 tomcat-jdbc.jar
-rwxrwxrwx  1 appsroot  staff    29458  6 15 22:02 tomcat-util.jar
-rwxrwxrwx  1 appsroot  staff   180543  6 15 22:02 tomcat7-websocket.jar
-rwxrwxrwx  1 appsroot  staff    36155  6 15 22:02 websocket-api.jar

그런데 좀 더 살펴보니 다음과 같은 히든 파일들이 존재하고 있었습니다.

appsroot:lib appsroot$ ls -ltra
total 22528
drwxrwxrwx@ 1 appsroot  staff   131072  5 20 04:33 .
drwxrwxrwx  1 appsroot  staff   131072  6 15 22:02 ..
-rwxrwxrwx@ 1 appsroot  staff    53445  6 15 22:02 catalina-ant.jar
-rwxrwxrwx@ 1 appsroot  staff    15978  6 15 22:02 annotations-api.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._annotations-api.jar
-rwxrwxrwx@ 1 appsroot  staff   132895  6 15 22:02 catalina-ha.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._catalina-ant.jar
-rwxrwxrwx@ 1 appsroot  staff   256780  6 15 22:02 catalina-tribes.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._catalina-ha.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._catalina-tribes.jar
-rwxrwxrwx@ 1 appsroot  staff  1594036  6 15 22:02 catalina.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._catalina.jar
-rwxrwxrwx@ 1 appsroot  staff  2272697  6 15 22:02 ecj-P20140317-1600.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._ecj-P20140317-1600.jar
-rwxrwxrwx@ 1 appsroot  staff    55426  6 15 22:02 el-api.jar
-rwxrwxrwx@ 1 appsroot  staff   124147  6 15 22:02 jasper-el.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._el-api.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._jasper-el.jar
-rwxrwxrwx@ 1 appsroot  staff   602132  6 15 22:02 jasper.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._jasper.jar
-rwxrwxrwx@ 1 appsroot  staff    87808  6 15 22:02 jsp-api.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._jsp-api.jar
-rwxrwxrwx@ 1 appsroot  staff   197876  6 15 22:02 servlet-api.jar
-rwxrwxrwx@ 1 appsroot  staff     6142  6 15 22:02 tomcat-api.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._servlet-api.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-api.jar
-rwxrwxrwx@ 1 appsroot  staff   828251  6 15 22:02 tomcat-coyote.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-coyote.jar
-rwxrwxrwx@ 1 appsroot  staff   234042  6 15 22:02 tomcat-dbcp.jar
-rwxrwxrwx@ 1 appsroot  staff    71913  6 15 22:02 tomcat-i18n-es.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-dbcp.jar
-rwxrwxrwx@ 1 appsroot  staff    43799  6 15 22:02 tomcat-i18n-fr.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-i18n-es.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-i18n-fr.jar
-rwxrwxrwx@ 1 appsroot  staff    47037  6 15 22:02 tomcat-i18n-ja.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-i18n-ja.jar
-rwxrwxrwx@ 1 appsroot  staff   125457  6 15 22:02 tomcat-jdbc.jar
-rwxrwxrwx@ 1 appsroot  staff    29458  6 15 22:02 tomcat-util.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-util.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat-jdbc.jar
-rwxrwxrwx@ 1 appsroot  staff   180543  6 15 22:02 tomcat7-websocket.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._tomcat7-websocket.jar
-rwxrwxrwx@ 1 appsroot  staff    36155  6 15 22:02 websocket-api.jar
-rwxrwxrwx  1 appsroot  staff     4096  6 15 22:02 ._websocket-api.jar

근본 원인을 말씀드리자면 제 테스트 환경이 MacOS 인데, 이 Tomcat 은 MacOS 에 연결된 외부 저장장치에 설치하였고 파일시스템은 ExFAT 이었습니다. 따라서  MacOS 에서 ._* 파일들을 생성해 놓았던 것이지요.

이 파일들에 대해서는 http://support.apple.com/kb/HT1627?viewlocale=en_US&locale=en_US 에서 좀 더 정확한 설명을 확인하실 수 있습니다.

그리고 이 ._* 파일들을 삭제하면 문제가 해결되기는 합니다.