JArパッケージをWEB-INF/libに直接コピーすることとuserLibrary形式で導入することの違いは?/JArパッケージをWEB-INF/libの下に置くのとbuild pathでインポートするのとの違いは何ですか?

5355 ワード

一般的にはclassLoaderに関連しており、純javaプロジェクトではWEB-INFディレクトリは存在しないため、jarパッケージを導入する際にbuildpathで直接導入するのが一般的である.例えばSpring 3 Xを導入する場合は、user libraryを定義し、build pathで導入する.
純javaプロジェクトで使用されているローカル独自のJREでは、classLoaderはjarとclassをロードするときに分離され、私たちが自分で作成したclassに対してAPP_HOME/bin下.インポートされたjarパッケージまたはuser libraryの構成情報がAPP_に表示されます.HOME/.classpathファイルでは、ClassLoaderはこれらのclassesとjarをスマートにロードします..classpathファイルの内容は次のとおりです.
 
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6"/>
    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Spring3.1.0"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/cglib/cglib-2.2.2.jar" sourcepath="E:/Jar_Framework/cglib/cglib-src-2.2.2.jar"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1.jar"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/aopalliance-1.0/aopalliance-1.0.jar"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/cglib/cglib-nodep-2.2.2.jar"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/spring revelant/aspectj-1.6.12.jar"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/spring revelant/aspectjweaver-1.6.8.jar"/>
    <classpathentry kind="lib" path="E:/Jar_Framework/spring revelant/asm-3.2.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

 
これによりClassLoaderは必要なすべてのクラスを正しく見つけます.
Javaのwebプロジェクトでは、eclipseのworkspaceにはまだありますが、違います.classpathファイルですが、自分で定義したuser libraryをインポートしても表示されません.classpathでは、これが問題の鍵です.これはいったいどうしてですか.
Java Webプロジェクトの場合、最終的にはローカルのJREではなく、Tomcat、Weblogic、WebSphereなどのWebサーバに配備され、これらのサーバは独自のクラスローダを実現します.Tomcatの典型的な結果を例にとると、4つのディレクトリ構造common、server、shared、webapppsはそれぞれ4つの異なるカスタムクラスローダCommonClassLoader、CatalinaClassLoader、SharedClassLoader、WebappClassLoaderに対応し、WebappClassLoaderローダはwebapppsの下の各webプロジェクトのWEB-INF下のクラスライブラリをロードする責任を負います.私たちがuser libraryで導入したjarパッケージは、WebappClassLoaderローダにロードされないので、ClassNotFoundExceptionに必ず報告されます.
オリジナル:http://hi.baidu.com/oritenson/blog/item/8c62adecf5aacdf0cf1b3e66.html