一部のアプリケーションではZKを使用し、他のアプリケーションではHibernate、その他のApache Commonsなどを使用しています。
たくさんのライブラリーを使用しているという理由だけで、75MBのwarファイルをデプロイしたくありません。
ライブラリをTomcat libフォルダーに追加したくありません。また、ライブラリーx.1を使用している古いアプリケーションとライブラリーx.2を使用している別のアプリケーションがあるため、その構成へのクラスパスも使用しません。
このため、web.xmlまたはcontext.xmlに何かを記述して、次のように記述できると便利です。
<classpath>/usr/local/Tomcat/custom-libs/zk-5.0.4</classpath>
注:上記は疑似コードです
Tomcat 7以降、本番環境でVirtualWebappLoaderを使用できないという言及はありません。私はそれを試してみましたが、それは夢のように機能します。以下をMETA-INF/context.xmlに追加するだけです。
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/websandbox">
<Loader className="org.Apache.catalina.loader.VirtualWebappLoader"
virtualClasspath="/usr/.../*.jar;/usr/.../*.jar"/>
</Context>
Netbeansのパッケージングでは、すべてのパッケージのチェックを外し、.warサイズをゼロにして、依存関係がサーバー上の正しいフォルダーにあることを確認し、アップロードします。イェイ! 100 MBのWARファイルはありません。
さらに@Spiderの回答。
Tomcat Context hold Loader 要素。 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
-ニース、最後のオプションを参照してください!!$CATALINA_BASE/webapps/$APP/META-INF/context.xml
-ニース、最後のオプションを参照してください!!$CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml
-best-完全にアプリケーションの外にあり、自動的に変更をスキャンします!!!ここでは、$CATALINA_BASE
階層からプロジェクトファイルの開発バージョンを使用する方法を示す私の構成(このファイルをsrc/test/resources
dirに配置し、Mavenに${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>
[〜#〜] update [〜#〜]Tomcat 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>
別の少しハックな代替手段。
rlclassloader から派生する5〜6行のカスタムクラスローダーを記述し、 addUrl() メソッドを使用してクラスパスjarを追加するだけです。
次に、アプリケーションコードでスレッドのコンテキストクラスローダーとして設定します。
Thread.setContextClassLoader(new CustomClassloader(path, parentClassLoader)
親クラスローダーは通常、
Thread.getContextClassloader()
これは、META-INF/context.xmlファイルを使用できる目的です。特定のWebアプリケーションのクラスをロードする独自のWebアプリケーションローダーを定義しました。これは私が使用したリファレンスです: http://Tomcat.Apache.org/Tomcat-5.5-doc/config/loader.html (編集:Tomcat 6の場合: http:// Tomcat.Apache.org/Tomcat-6.0-doc/config/loader.html 、Tomcat 7の場合: http://Tomcat.Apache.org/Tomcat-7.0-doc/config/loader.html )
また、このフェローはあなたの正確な問題(含まれている例)の解決策を投稿しているようです: http://Java.dzone.com/articles/extending-Tomcat-webapploader