C:ドライブにC:\app_config\Java_app
としてフォルダーがあります。このフォルダーには、ロケール固有のプロパティファイルが含まれています。
Web Appの起動時にデフォルトロケールに基づいてプロパティファイルをロードするJavaクラス(PrjPropertilesLocator
)があります。WebアプリケーションはTomcat内で実行されています。問題は、このディレクトリC:\app_config\Java_app
をTomcatクラスパスに設定して、PrjPropertilesLocator
クラス内のResourceBundleで使用できるようにする方法です。このフォルダーを必要とする単一のWebアプリ専用に設定する方法はありますか。プロパティファイルをWEB-INF/classes
フォルダー内に配置したくありません。
Weblogicではこれは正常に動作します。起動スクリプトの1つでweblogicクラスパス内のディレクトリを設定すると、正常に動作します。しかし、Tomcatではstartup.bat
とsetclasspath.bat
に入れてみましたが、うまくできませんでした。
shared.loader
のcommon.loader
または/conf/catalina.properties
プロパティで指定するだけです。
質問も参照してください: Tomcatでアプリケーションごとにカスタムクラスパスを作成できます
Tomcat 7 コンテキスト hold ローダー 要素。 docs デプロイメント記述子(<Context>
タグの内容)に従って、次の場所に配置できます。
$CATALINA_BASE/conf/server.xml
-悪い-設定を再読み込みするにはサーバーの再起動が必要$CATALINA_BASE/conf/context.xml
-悪い-すべてのアプリケーションで共有$CATALINA_BASE/work/$APP.war:/META-INF/context.xml
-悪い-設定を変更するには再パッケージが必要$CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml
-Nice、ただし最後のオプションを参照!!$CATALINA_BASE/webapps/$APP/META-INF/context.xml
-Nice、ただし最後のオプションを参照!!$CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml
-best-完全にアプリケーションから外れ、変更を自動的にスキャンします!!!ここで、$CATALINA_BASE
階層からプロジェクトファイルの開発バージョンを使用する方法を示す私の構成(このファイルをsrc/test/resources
dirに配置し、${basedir}
プレースホルダーをpom.xml
プレースホルダーでプリプロセスする] _ <filtering>true</filtering>
したがって、新しい環境でビルドした後、$CATALINA_BASE/conf/Catalina/localhost/$APP.xml
にコピーします。
<Context docBase="${basedir}/src/main/webapp"
reloadable="true">
<!-- http://Tomcat.Apache.org/Tomcat-7.0-doc/config/context.html -->
<Resources className="org.Apache.naming.resources.VirtualDirContext"
extraResourcePaths="/WEB-INF/classes=${basedir}/target/classes,/WEB-INF/lib=${basedir}/target/${project.build.finalName}/WEB-INF/lib"/>
<Loader className="org.Apache.catalina.loader.VirtualWebappLoader"
virtualClasspath="${basedir}/target/classes;${basedir}/target/${project.build.finalName}/WEB-INF/lib"/>
<JarScanner scanAllDirectories="true"/>
<!-- Use development version of JS/CSS files. -->
<Parameter name="min" value="dev"/>
<Environment name="app.devel.ldap" value="USER" type="Java.lang.String" override="true"/>
<Environment name="app.devel.permitAll" value="true" type="Java.lang.String" override="true"/>
</Context>
UPDATETomcat 8の構文変更<Resources>
および<Loader>
要素、対応する部分は現在好む:
<Resources>
<PostResources className="org.Apache.catalina.webresources.DirResourceSet"
webAppMount="/WEB-INF/classes" base="${basedir}/target/classes" />
<PostResources className="org.Apache.catalina.webresources.DirResourceSet"
webAppMount="/WEB-INF/lib" base="${basedir}/target/${project.build.finalName}/WEB-INF/lib" />
</Resources>
Tomcat 6では、環境内のCLASSPATHは無視されます。 setclasspath.batに表示されます
set CLASSPATH=%Java_HOME%\lib\tools.jar
それからcatalina.batでは、次のように使用されます
%_EXECJAVA% %Java_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%
-Djava.endorsed.dirs="%Java_ENDORSED_DIRS%" -classpath "%CLASSPATH%"
-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%"
-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
含まれている他の変数は見当たらないので、setclasspath.batの編集とCLASSPATHの構築方法の変更にこだわっていると思います。 Tomcat 6.0.20の場合、この変更はsetclasspath.batの74のように行われました
set CLASSPATH=C:\app_config\Java_app;%Java_HOME%\lib\tools.jar
.warファイルにMETA-INF
ファイルを含むMANIFEST.MF
ディレクトリを追加することをお勧めします。
サーブレットの仕様によると、META-INF/MANIFEST.MF
がコンテナによって読み取られるためには、.warファイルではなく.warファイルである必要があります。
MANIFEST.MF
Class-PathプロパティをC:\app_config\Java_app
に編集します。
JARファイルの使用:基本(マニフェストの理解) を参照してください
楽しい。
Tomcats binディレクトリ内に新しいファイルsetenv.sh(またはsetenv.bat)を作成し、そこに次の行を追加できます。
export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR