我有一个使用连接池的Sping Boot 项目,它在我的电脑上工作正常,但当我的同事从git中取出代码后,尝试运行时,它抛出了如下错误:
2018-02-28 14:49:24.527 WARN 11856 --- [ost-startStop-1] o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/C:/Users/ABC/.m2/repository/com/mchange/c3p0/0.9.5.2/mchange-commons-java-0.2.11.jar] from classloader hierarchy
java.io.FileNotFoundException: C:\Users\ABC\.m2\repository\com\mchange\c3p0\0.9.5.2\mchange-commons-java-0.2.11.jar (The system cannot find the file specified)
at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_60]
at java.util.zip.ZipFile.<init>(ZipFile.java:219) ~[na:1.8.0_60]
at java.util.zip.ZipFile.<init>(ZipFile.java:149) ~[na:1.8.0_60]
at java.util.jar.JarFile.<init>(JarFile.java:166) ~[na:1.8.0_60]
at java.util.jar.JarFile.<init>(JarFile.java:130) ~[na:1.8.0_60]
at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) [tomcat-embed-jasper-8.5.23.jar:8.5.23]
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) [tomcat-embed-jasper-8.5.23.jar:8.5.23]
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101) [tomcat-embed-jasper-8.5.23.jar:8.5.23]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.23.jar:8.5.23]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_60]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]
我还尝试为mchange-commons-java-0.2.11添加依赖项,但仍然不起作用:
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.11</version>
</dependency>
如果你面对过或有过这样的经历,请给我留下评论/想法。
您的意见或建议将不胜感激和欢迎!
5条答案
按热度按时间wecizke31#
从标准JarScannerjavadoc:
默认的JarScanner实现扫描WEB-INF/lib目录,然后扫描提供的类加载器,然后向上运行类加载器层次结构。此实现足以满足Servlet 3.0规范的要求并提供许多Tomcat特定的扩展。这些扩展包括:
要禁止在启动时扫描该特定jar,您可以添加此特定于spring Boot 的属性:
35g0bw712#
问题是c3p0 .jar文件的类路径错误:
bq9c1y663#
不知何故,您的spring Boot 可传递依赖项引用了错误的mchange-commons-java。从您的错误中,它正在搜索路径.m2\repository\com\mchange\c3p0\0.9.5.2\mchange-commons-java-0.2.11.jar。请参见突出显示的c3 p0。理想情况下,路径必须是com\mchange\mchange-commons-java\0.2.11\mchange-commons-java-0.2.11.jar。
mchange-commons-java依赖关系似乎发生冲突。
当你在eclipse或任何编辑器中打开pom.xml时,你会看到依赖关系层次结构,其中列出了所有可传递的依赖关系,看看c3 p0中是否有任何的mchange-commons-java,如果有,排除掉那个依赖关系,然后你显式声明的依赖关系mchange-commons-java dependency就可以工作了。
ogsagwnx4#
对于我来说,quartz库也通过c3po依赖项产生了冲突,但我刚刚将此属性值添加到JVM运行参数中,以便Tomcat跳过扫描不需要的jar文件:
-Dtomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
(if您可以将其添加到catalina.properties文件中,只需删除
-D
前缀即可)如果需要jar扫描,可以只排除有问题的jar,而不是排除
*.jar
ffx8fchx5#
我的问题是这样解决的,看看你能不能解决你的问题。问题解决方法https://my.oschina.net/antsdot/blog/1634440