-1

maven-tomcat-pluginを使用して、tomcat6サーバーにタペストリーアプリケーションをデプロイしています。展開プロセスは正常に機能しましたが、本番/開発/テストなどのさまざまなパスを使用して、複数回展開する必要があります。環境では、これはMavenプロファイルを使用したものです。

1つのデプロイメントプロファイルのコンテキストパスを次のように設定しました/myapp/latest。デプロイに使用される生成されたURLは次のようになります。

http://example.com:8080/manager/deploy?path=%2Fmyapp%2Flatest&update=true

Tomcatは現在、いくつかの規則を使用しています。アプリのURLを作成するために、.warのファイル名でハッシュ記号がスラッシュに置き換えられます(#に置き換えられます)。/戦争は、名前が.war拡張子のない戦争のファイル名であるフォルダーに解凍されます。

アプリケーションを起動できません。理由はログから明らかです。

Caused by: java.io.FileNotFoundException: /var/lib/tomcat6/webapps/myapp%23latest/WEB-INF/classes/de/myapp/services/AppModule.class (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at org.apache.tapestry5.internal.plastic.PlasticInternalUtils.getStreamForPath(PlasticInternalUtils.java:408)
    at org.apache.tapestry5.internal.plastic.PlasticInternalUtils.readBytecodeForClass(PlasticInternalUtils.java:370)

パス/var/lib/tomcat6/webapps/myapp%23latest/は存在しません。もちろん存在するはず/var/lib/tomcat6/webapps/myapp#latest/です。%23はハッシュ記号なので、ある時点でURLエンコードされたと思います。私はこの問題について多くを見つけることができません。残念ながら、解決策がないのに、ダブルハッシュを含むtomcat7のいくつかの同様の問題があります。

サブパスを使用しないことでこの問題を回避できますが、これは機能するはずです。グリズリー/ジャージープロジェクトで同じ方法を問題なく使用しました。

サブパスを正しく設定するにはどうすればよいですか?パスをエンコードしないようにアプリケーションに指示する方法はありますか?tomcatプラグインはここでは多くのオプションを提供していないようですが、web.xmlやcontext.xmlなどの構成ファイルにパスを設定する方法はありますか?

4

1 に答える 1

1

私のコメントに加えて、これはタペストリーのPlasticInternalUtils.getStreamForPath方法のバグが原因である可能性があると思います。ここにあなたが見つけるでしょう:

if (url.getProtocol().equals("file"))
    {
        String urlPath = url.getPath();
        String decoded = urlPath.replaceAll("%20", " ");
        return new FileInputStream(new File(decoded));
     }

したがって、スペースは処理されますが、他のエスケープシーケンスは処理されません。バグを報告し、以下を使用してデコードされたすべてのエスケープシーケンスを使用して独自のバージョンのTapestryを構築することをお勧めします。

URLDecoder.decode(urlPath, "UTF-8") 
于 2012-10-20T00:13:03.750 に答える