Struts2不扫描jar包中的action

将Struts2的Action移至jar包中后,遇到加载问题。解决方法是在struts.xml中配置`struts.convention.action.includeJars`属性,使用正则表达式如`.*?/common*.*?jar(!/)?`。若非Maven打包,需确保jar内有META-INF目录,否则会导致加载失败。可以通过检查类路径中'META-INF'是否存在来诊断问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前action都是在web应用下,生成war后就是在classes目录下,一直没问题,后来因为模块多了,希望把模块拆开,每个模块自己的action就放到自己相应的jar里面去,结果问题来了,我把action移到jar里面后,在eclipse里面用maven-tomcat插件运行是没问题的,但是部署到tomcat里面后发现action没有被加载,在网上搜了下发现是要在struts.xml里面增加下面的配置:

   设置Convention插件文件协议类型

     <constant name="struts.convention.action.fileProtocolsvalue="jar,wsjar" />
     设置 Convention 插件需要搜索的jar包
     <constant name="struts.convention.action.includeJarsvalue=".*?/struts2-action*.*?jar(!/)?" />
     该常量指定包作为根包来搜索Action类。
     Convention插件除了扫描默认的action,actions,struts,struts2,还会扫描该常量指定的一个或多个包,
     Convention会试图从指定包中发现Action类。
     <constant name="struts.convention.action.packagesvalue="com.home.prog" />


最主要的就是struts.convention.action.includeJars 这个属性,值可以是多个,用逗号隔开,但是一定要加.*?/common*.*?jar(!/)? 正则表达式,我试过直接写jar包的命名也不行,不加正则表达式,会报错说

The includeJars pattern [common.jar] did not match any jars in the classpath.


另外还有一个问题,如果不是maven打的包,jar里面很可能没有META-INF这个目录,也会导致加载不到。

可以用下面的代码检查jar包是否因为META-INF目录不存在而没有加载到:

ArrayList urls = Collections.list(Thread.currentThread().getContextClassLoader().getResources("META-INF"));
            if(urls != null){
                for (Object object : urls) {
                    System.out.println("======================" + object);
                }
            }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值