该应用程序使用 Jboss 并且有一个包含 war 文件和 jar 文件的 ear 文件。战争占据了我们所有的网页。我注释的动作类在耳朵里的 jar 文件中。从我的谷歌搜索中,我已经使用以下常量设置了我的 struts.xml 文件:
<constant name="struts.convention.action.fileProtocols" value="ear,jar,vfsfile,vfszip" />
<constant name="struts.convention.action.disableJarScanning" value="false"/>
<constant name="struts.convention.action.includeJars" value=".*/lightspeed.*?jar(!/)?,.*/lightspeed*?jar(!/)?,.*lightspeed.*?jar(!/)?,.*lightspeed*?jar(!/)?" />
Jboss 容器启动正常,但我的操作未加载。我已经下载了约定插件的源代码,以查看它用于查找操作类的内容,并且它似乎只在扫描时查看操作类的 war 文件。有没有办法让它在扫描带注释的动作类时查看包含动作类的 jar 文件?
文件结构:
-application.ear
|--application.war
|--aplication_logic_actions.jar <--- 这包含被注释的动作类
我已经调试了约定插件的代码,这就是我看到我的问题的地方。在PackageBasedActionConfigBuilder类和buildUrlSet()方法中,它具有以下代码行:
UrlSet urlSet = new UrlSet(classLoaderInterface, this.fileProtocols);
在这段代码之后,我得到了大约 200 + url。然后它通过以下代码:
if (excludeParentClassLoader) {
这个条件块删除了我所有的 url,因为我猜它们都来自 jboss,并且我将excludeParentClassLoader设置为 true。然后它会点击以下代码:
urlSet = urlSet.includeClassesUrl(classLoaderInterface);
在此之后,我的 urlset 中有一个 url:
file:/C:/evolution/trunk/powersports/jboss/server/dms/deploy/http-invoker.sar/invoker.war=file:/C:/evolution/trunk/powersports/jboss/server/dms/deploy/ http-invoker.sar/invoker.war
现在它终于到达了包含 jar 正则表达式的部分
List<URL> rawIncludedUrls = urlSet.getUrls();
Set<URL> includeUrls = new HashSet<URL>();
boolean[] patternUsed = new boolean[includeJars.length];
for (URL url : rawIncludedUrls) {
因为 urlset 中有 1 个 url 而我的 jar 不在那里,所以它找不到它们。在运行正则表达式比较代码之前,如何让我的 url 显示在该 url 集中,我一定还缺少其他东西,我只是不知道那是什么