idea配置tomcat,Loader delegate、Libraries、以及Dependencies

本次遇到的问题是在一个非常古老的项目上,用idea配置一个Eclipse项目时无法正常读取Context .xml中配置的数据源信息。原因其实是jar包的配置问题。

开始一直认为是jar包冲突,没有考虑到配置上的原因所以一直没有找到正确的解决办法。

 

尝试一、修改jar包版本,更换tomcat小版本、检查重复jar包

      然并卵。

尝试二、修改<Loader delegate="true" />

       首先尝试的是听网上说的在tomcat/conf/Context.xml中追加<Loader delegate="true" />属性,追加之后项目正常启动,但会报文件找不到的异常,经过排查发现,报错代码,都是在 类.class.getResource 的方法获取类加载器的路径,路径本该指向项目路径,但在开启<Loader delegate="true" />属性后,项目指向改为了tomcat/lib路径下,导致项目正常启动,功能异常。

下面是对该属性的详细解释:

Loader对象可出现在Context中以控制Java类的加载。属性:delegate

delegate配置的意义:

True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。

False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。
在此说一下配置为False需要注意的问题:一旦配置为False,就要注意多个WebApp公用jar包存放位置,你可能会放到${CATALINA_HOME}/shared目录中共享,但是一不小心在应用的/WEB-INF/lib中也包含了一个同名的但版本不一致的jar的话,这就有可能会导致很多奇怪的问题。
原文链接:https://blog.csdn.net/u013031360/article/details/52389402

尝试三、检查jar包配置

      由上文大佬的最后一句可以得知,是在tomcat/lib与项目的WEB-INF/lib中会有重复的jar包,去检查项目jar包路径果然存在一整套tomcat项目下的路径(其实早就检查过,只是之前检查的是源码而不是生成目录的jar包),猜想是我之前把tomcat的jar包目录以libraries的形式引进来的缘故,下面黄框位置是我引入的tomcat的jar包

      在删掉这个引用之后项目报错,无法编译

之后在网上看到了这张图

https://www.jianshu.com/p/42415a3bc58a

 

这就明白了,外部jar包的引用需要走模块的dependencies依赖这个地方配置进去,而不是引入项目的libraries,引入项目的libraries会让idea顺带编译进生成文件的lib中,以致于出现重复jar包。

      删掉libraries中对tomcat中lib的引用,追加dependencies中的依赖,rebuild,启动,项目不需要delegate=true配置亦可正常启动。

 

附录:

idea的部署方式

  • 1.编译,IDEA在保存/自动保存后不会做编译,不像Eclipse的保存即编译,因此在运行server前会做一次编译。编译后class文件存放在指定的module编译输出目录下。
  • 2.根据artifact中的设定对目录结构进行创建;
  • 3.拷贝web资源的根目录下的所有文件到artifact的目录下;
  • 4.拷贝编译输出目录下的classes目录到artifact下的WEB-INF下;
  • 5.拷贝lib目录下所需的jar包到artifact下的WEB_INF下;
  • 6.运行server,运行成功后,如有需要,会自动打开浏览器访问指定url。

详细信息转自:https://blog.csdn.net/qq_35495339/article/details/89474932

 

WEB-INF目录下的classes是会自动复制出来的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值