4

私は Eclipse 3.7.2 でたくさんのプロジェクトを作成しました。それらのいくつかに名前を付けましょう。

  • W (動的 Web プロジェクト)
  • A (いくつかのライブラリ)
  • B (他のプロジェクトでも使用されている、多くの一般的なものを含むライブラリ)

プロジェクト A はプロジェクト B に依存しているため、B は A のビルド パスにあります。プロジェクト W はプロジェクト A に依存しているため、A を展開アセンブリとして W に追加しました。

Eclipse 内から WAR をエクスポートすると、A の JAR ファイルのみが WEB-INF/lib に追加されます。Eclipse は次の警告を表示します。

クラスパス エントリ /B はエクスポートまたは公開されません。ランタイム ClassNotFoundExceptions が発生する場合があります。

警告は正しいです。実行時に ClassNotFoundExceptions が発生します。もちろん、Eclipse は、「関連する生のクラスパス エントリをパブリッシュ/エクスポートの依存関係としてマークする」という警告に対するクイック フィックスを提供します。ただし、これで問題は解決しません。B はまだ W でデプロイされません。

A に B を Deployment Assembly として手動で追加しようとしました。これには、A.jar 内の B.jar が含まれていますが、これは私が本当に望んでいるものではなく、ClassNotFoundExceptions が引き続き発生します。

機能する唯一のことは、B を W の Deployment Assembly として手動で追加することです。Eclipse には上記の警告が引き続き表示されますが、実行時例外はなくなります。

私は何かが欠けていますか、それともこれが本当にこれを機能させる唯一の方法ですか?

4

1 に答える 1

4

Eclipseの「エクスポート/Web/ WARファイル」を機能させるには、プロジェクト「b」を「Webアプリライブラリ」コンテナに表示する必要があります。

プロジェクトプロパティの[配置アセンブリ]ページを使用して配置構成を編集し、そこにプロジェクト「b」を追加できます。

デプロイメントアセンブリ

または、で構成ファイルを開き/w/.settings/org.eclipse.wst.common.component、プロジェクト「b」への参照を手動で追加することもできます。

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="w">
        <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
        <dependent-module archiveName="a.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/a/a">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <dependent-module archiveName="b.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/b/b">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <property name="context-root" value="w"/>
        <property name="java-output-path" value="/w/build/classes"/>
    </wb-module>
</project-modules>

完了すると、「Web AppLibraries」クラスパスコンテナにプロジェクト「b」が表示され、WARファイルにエクスポートするとb.jarもWEB-INF/libに追加されます。

于 2012-06-13T18:26:53.700 に答える