7

私は、2 つの Eclipse プロジェクト (myclient と myservice) に分割された GWT Web アプリケーションに取り組んでいます。

myclient プロジェクトは、POM の依存関係を介して myservice プロジェクトを参照します。

<dependency>
<groupId>com.myproject</groupId>
<artifactId>myservices</artifactId>
<version>1.0.0</version>
</dependency>

myclient プロジェクトには WAR ディレクトリ src/main/webapp があります。myclient プロジェクトの出力フォルダーは src/main/webapp/WEB-INF/classes です。

myclient プロジェクトには、次の Spring 記述子 application-context.xml があります。

<context:component-scan base-package="com.myproject.myclient, com.myproject.myservices"/>

および web.xml

<web-app>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/application-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener> 
...
</web-app>

spring @Component、@Service、@Configuration のアノテーションが付けられた myservices プロジェクトにいくつかのファイルがありますが、これらは Eclipse で GWT アプリケーションを実行するときにコンポーネント スキャンで検出されません。テストとして、@Component を myclient プロジェクトに配置して実験したところ、これは正常に作成されました。

アプリケーションの起動中の次のログ エントリが問題の原因を示していると思います

org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/myproject/myservices/**/*.class] to resources []

myclient プロジェクトのロケーション パターンは、クラスパス上のすべてのリソースに解決されますが、myservices ではリソースが見つかりません。

myservices プロジェクトの JAR を作成し、この JAR を myclient プロジェクトの src/main/webapp/WEB-INF/lib フォルダーに配置してみました。これを行うと、コンポーネントのスキャンが機能します。ただし、開発のために、myservices プロジェクトに変更を加えるたびに JAR をビルドしてコピーする必要はありません。コンポーネントのスキャンは、そのプロジェクトをビルドする必要なく、POM を介して参照されるプロジェクトで機能するはずですが、多くの実験の後、これを機能させることができませんでした。

4

6 に答える 6

2

デプロイ アセンブリ (Web プロジェクトを右クリックし、myclient プロジェクトの "デプロイ アセンブリ" を選択) で、myservices プロジェクトによって出力される jar をデプロイするように構成されていることを確認してください。maven を使用している場合は、m2e、m2e-wtpプロジェクト コンフィギュレーターは、この展開アセンブリのセットアップを自動的に行う必要があります。

デプロイメント アセンブリの設定を適切に構成したら、Eclispe サーバー アダプター パブリッシュ メカニズムを使用してプロジェクトをサーバーにデプロイすると、すべてがデプロイされ、myservices jar が myclient プロジェクトの適切な場所に配置されます。

ただし、 m2e-wtpの最新バージョンがインストールされていることを確認してください。このようにして、pom.xml と展開アセンブリの構成が正しく構成されます。

于 2013-02-27T06:02:30.687 に答える
2

application-context.xml を 2 つの個別のファイルに分割してみてください。

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:service-context.xml,classpath:client-context.xml</param-value>
</context-param>

myservices/src/main/resources/service-context.xml:

<context:component-scan base-package="com.myproject.myservices"/>

myclient/src/main/resources/client-context.xml:

<context:component-scan base-package="com.myproject.myclient"/>
于 2013-02-28T16:30:14.213 に答える
1

これを試して :

<context:component-scan base-package="com.myproject"/>
于 2013-02-27T10:37:35.853 に答える
1

サービス jar がクライアント プロジェクトのビルド パスに含まれていないことは明らかです。これが唯一の根本原因です。

3つのポイントを確認してください:

  1. 正しい pom.xml を持つサービス プロジェクトでmvn clean installを実行しました。
  2. クライアント プロジェクトでmvn eclipse:eclipseを実行しました。これにより、すべての依存関係プロジェクトが取り出されます。
  3. クライアントの Eclipse プロジェクトのビルド パス ダイアログを確認してください。リストにサービス jar がありますか? これを確認してください
于 2013-03-05T12:23:13.760 に答える
1

次のことを確認してください。

  1. あなたのサービスプロジェクトはjarとして「のみ」存在しますか、それともプロジェクト全体がワークスペースの解決によって利用可能ですか. これは、maven-context-menue (ワークスペース解像度の無効化/有効化) で確認できます。
  2. src/main/webapp 以下の webapp のレイアウトは問題ありません。しかし、すべてのクラスがそこにコピーされていることは正しいですか? その場合は、すべてがターゲット ディレクトリの下にあることを確認する必要があります。そのため、maven 呼び出し「クリーン パッケージ」がターゲット フォルダーの下に webappstructure を生成し、必要なすべてのライブラリ (myservice など) がtarget\$your-webarchivename\WEB-INF\lib の下に存在するかどうかを確認してください。
    1. myservice pom.xml のパッケージングが jar に設定されていることを確認します (おそらくこれがありますよね?)
于 2013-03-04T11:50:57.047 に答える
0

このチュートリアル http://fusesource.com/docs/framework/2.2/deploy_guide/CXFServletDeploySpring.htmlを一度見てください。

于 2013-03-04T03:14:48.940 に答える