web-dev-qa-db-ja.com

Tomcatクラスパスにディレクトリを追加する

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.batsetclasspath.batに入れてみましたが、うまくできませんでした。

67
Rajat

shared.loadercommon.loaderまたは/conf/catalina.propertiesプロパティで指定するだけです。

122
BalusC

質問も参照してください: 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>
27
gavenkoa

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
13
Trenton

.warファイルにMETA-INFファイルを含むMANIFEST.MFディレクトリを追加することをお勧めします。

サーブレットの仕様によると、META-INF/MANIFEST.MFがコンテナによって読み取られるためには、.warファイルではなく.warファイルである必要があります。

MANIFEST.MF Class-PathプロパティをC:\app_config\Java_appに編集します。

JARファイルの使用:基本(マニフェストの理解) を参照してください

楽しい。

5
Koekiebox

Tomcats binディレクトリ内に新しいファイルsetenv.sh(またはsetenv.bat)を作成し、そこに次の行を追加できます。

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR
2
Sudhir N