2013-10-22 19 views
6

Webアプリケーションのcontext.xmlのdocBase属性への相対パスを設定する方法はありますか?そのため、TomcatサーバーインスタンスのappBaseディレクトリの外にありますか?Context.xml内の相対パス

コンピュータ間でコンテキスト設定を共有し、そのアプリケーションをwarファイルではなくディレクトリに置くことができるようにしたいと考えています。そうすれば、私はそのディレクトリに(プロジェクト開発ディレクトリ内の)そのディレクトリに直接クラスをコンパイルし、Tomcatがこれらのクラスをコピー/パッケージ化なしで使用できるようにすることができます。

私はtomcat 8.0.0-RC5を使用しています。 私のディレクトリレイアウトは以下のとおりです。

/home/david/projects/frontend/web-content   <-- the static html files 
/home/david/projects/frontend/web-content/WEB-INF <-- the WEB-INF with the web.xml 
/home/david/projects/tomcat      <-- tomcat base directory 
/home/david/projects/tomcat/Catalina/localhost  <-- holds the frontend.xml context configuration 

私は

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/frontend" docBase="../../frontend/web-content"> 
</Context> 

を試してみましたが、それは動作しませんでした。/web-contentの前の全体のパスは無視されているようです。ログは言う:

The main resource set specified [/home/david/projects/tomcat/webapps/web-content] is not valid 

コンテキストコンテナのTomcat 8 documentationは言う:

あなたは、このディレクトリまたはWARファイルの絶対パス名、またはののappBaseディレクトリからの相対パス名を指定することもできますホストを所有しています。

ここでいう相対値は、appBase(no .. allowed)の厳密なサブディレクトリを意味しますか?

絶対パスを設定すると問題なく動作します。構成

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/frontend" docBase="/home/david/projects/frontend/web-content"> 
</Context> 

が動作しますが、それは自分のコンピュータに固有のものです。だから私はもはや変更せずにコンテキストの設定を共有することはできません。

TomcatサーバーのappBaseディレクトリ内にシンボリックリンクを作成して、自分のアプリケーションのWebコンテンツフォルダを指すようにすることができます。これはうまくいくだろうが、私はLinuxとWindowsマシン上で異なる設定(シンボリックリンク)を持つだろう。

+2

「appBase」はserver.xmlにどのくらい正確に設定されていますか? – david

+0

server.xmlのホスト設定を変更していないので、デフォルト値のままです。 david

答えて

5

ほとんどの場合、相対パス名の最後の名前だけをとり、最初の部分は無視してください。 は、ほとんどの場合、tomcatのバグです。相対パス名は動作する必要があります。エラーを投げる必要があります。 しかし、部品を無視するのは悪いです。私はただのTomcat 8.0.15の変更履歴を読ん <Context docBase="${catalina.home}/../www.war"

: この問題を回避するには、このような絶対パス名を使用している可能性があります。 バグを修正する必要があります(!): "ContextのdocBase属性の相対値を正しく処理します。"