您的位置:首页技术文章
文章详情页

java-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来

【字号: 日期:2023-12-17 17:02:51浏览:54作者:猪猪

问题描述

有2个jar包commons-fileupload-1.3.2.jar和commons-io-2.5.jar我开始是把这两个包和其他包一样放外面的,也就是External Libraries写好相关的类之后,在web.xml配置servlet和mapping

<servlet> <servlet-name>mytest</servlet-name> <servlet-class>servlet.FileUploadServlet</servlet-class></servlet><servlet-mapping> <servlet-name>mytest</servlet-name> <url-pattern>/upload</url-pattern></servlet-mapping>

然后Tomcat就无法启动,提示:

严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

问题:commons-fileupload和commons-io这两个jar一定要放在WEB-INF下么,为什么?为什么不能放在External Libraries?我其他包都放在External中都能用啊java-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来java-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来怎么这两个就进不来呢?我在WEB-INF下新建一个lib,然后把这两个包放进去,发布的时候就有了,然后运行也正常这两个包有什么特别的地方?为什么一定要放WEB-INF下

问题解答

回答1:

idea的tomcat插件发布应用是这个Artifactjava-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来

看看你的当前项目的Artifact是不是没有External Libraries里面依赖的jar包java-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来java-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来

那就再这个Artifact里面加上lib(在项目web/WEB-INF/lib下放入jar包会自动加到Artifact里面。这就是为什么你说的为什么放到WEB-INF才行的原因。当然你完全可以把依赖jar包还放在External Libraries,在Artifact这里添加上就行,不过还是推荐把依赖的jar包放在项目web/WEB-INF/lib里面,把这个文件夹作为一个jar库放在External Libraries)java-web - Java WEB:什么样的jar包必须放到WEB-INF下?有些包放外面tomcat就起不来

之后在启动tomcat依赖问题得到解决

回答2:

先纠正一下,是WEB-INF目录,不是WEB-INFI。

发布之前,你是用maven对项目打包的吗?如果maven中有commons-fileupload的依赖,打包时会放在WEB-INF/lib下的。

回答3:

运行时依赖的包

回答4:

放在WEB-INF/lib中的jar包,即使不引入为依赖,package的时候,也会默认被打到最终的war包里(位置依然是WEB-INF/lib)。至于位置不在WEB-INF/lib下的jar包,则需要引入为依赖,才会在package时打入最终的war包(依然会位于WEB-INF/lib)。引入为依赖的方法可参考3楼的解答

回答5:

我也遇到过这个问题,我发现Import的Jar发布时没添加到WEB-INF/lib下,在Tomcat目录下确实看不到相应的Jar,于是我每次Import后都再复制粘贴到的WEB-INF/lib下,甚至有时直接不Import直接就往Referenced Libraries和WEB-INF/lib下粘贴。

标签: java
相关文章: