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