如图所示,pom.xml默认引入这一大堆东西。内含一个javassist的jar(它作为osgi框架的依赖包被默认引入,这里因为引用列表太长,没截出来)。
当我add struts2的依赖后发现,项目跑不起来,报错。控制台告诉我缺javassist,当时我就不理解了,因为maven的引用列表告诉我它已经引用了。
实验发现,Maven这些默认引入的jar都不会被拷贝到运行的WEB-INF/lib下,所以,我要使用struts2,让lib下存在javassist.jar,得先去除默认的javassist依赖,再手动给pom.xml添加javassist依赖才行。
最后问题解决,控制台也不再提示我缺包了。
但我依然很不明白,maven既然不帮我把jar拷贝到执行环境中,那么给我默认引入这么多jar搞毛啊?
J2EE的依赖我还能理解,因为tomcat容器已经有相应的J2EE接口实现,再引入的话会造成jar冲突。但另外的一些jar如javassist没有冲突问题,但如果真要用到,我还得手动去除依赖再手动引入依赖,总之用户体验很糟很糟。
所以我不明白,这些maven默认引入依赖有什么存在的意义?
首先可以确定的是,这些不是MavenPOM的默认引入,笔者从事maven多年,都是需要用什么包都是自己在POM里面添加的,唯一可能的是会吧JDK的包引入进来,当然了这也是可以理解的,maven是运行在jdk之上的,楼主的这个情况我觉得是IDE本身的问题,可能是MyEclipse的maven插件有些特别的配置,或者是有附加的类库等。
建议楼主通过命令行窗口进行打包构建这是最干净可靠的
比如:mvncleancompilewar:war
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。