アプリケーションは Jboss を使用しており、war ファイルと jar ファイルを含む ear ファイルがあります。戦争は私たちのすべてのウェブページを含んでいます。注釈を付けたアクション クラスは、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 に 1 つの URL を取得します。
ファイル:/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) {
URLセットに1つのURLがあり、私のjarがそこにないため、それらが見つかりません。正規表現比較コードが実行される前に、そのURLセットに自分のURLを表示させる方法について、他に何か欠けているものがあるに違いありません。それが何であるかわかりません