2

私は、互いに依存するいくつかのMavenプロジェクトをEclipseに持っています。これらの一部は、Spring ライブラリ (Spring コア、Spring MVC など) に依存しています。

「mvn clean install」を使用してプロジェクトをビルドすると、maven によって war ファイルが生成され、./target/ フォルダーに配置されます。次に、この war ファイルを取得して、実行中のアプリケーション サーバーにデプロイします。Tomcat 7 と Jboss 7.1.0 の両方で war ファイルをテストしましたが、正常に動作します。

ただし、プロジェクトをEclipseから直接実行しようとすると問題が発生します。サーバーコードをデバッグできるようにしたいのですが、これが可能であることを知っている唯一の方法は、Eclipse内で実行されているアプリケーションサーバーでプロジェクトを実行することです。

Eclipse で Tomcat アプリケーション サーバーを構成しました。Maven プロジェクトを選択して右クリックし、[Run on Server] を選択すると、プロジェクトは実行中の Tomcat インスタンスにデプロイされますが、何らかの理由で次のエラーが発生します。

12-May-2012 15:48:22 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4715)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1568)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1558)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:619)
12-May-2012 15:48:22 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Skipped installing application listeners due to previous error(s)

私は同じことを試しました。つまり、Eclipse の Jboss インスタンスでプロジェクトを実行しましたが、いくつかのライブラリが見つからないことにも不満があります。それが不平を言うライブラリのほとんどは、Maven POM ファイルで依存関係と呼ばれるものです。

プロジェクトをTomcatまたはJboss(Jbossツールを使用)にデプロイすると、依存関係がデプロイされていないため、エラーが発生すると思われます。すべての依存関係もデプロイするように Eclipse に指示するには、他の構成が必要ですか?

warファイルを手動でデプロイすると機能することに注意してください。Eclipse で「サーバー上で実行」オプションを使用して展開すると、機能しません。

ありがとう

4

1 に答える 1

4

プロジェクトのどこかに WEB-INF フォルダーがあるとします。これには、プロジェクトが依存するすべての jar を含む lib という名前のサブフォルダーがありますか?

そうでない場合は、それらがそこにコピーされていることを確認する必要があります。次のように maven 依存関係プラグインを使用してこれを行うことができます。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
    <execution>
        <phase>process-resources</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/lib</outputDirectory>
</configuration>

WEB-INF フォルダーの場所が上記と異なる場合は、忘れずに変更してください。また、クリーン時にこのディレクトリを空にするようにクリーン プラグインを構成する必要があります。そうしないと、依存関係を削除しても、jar ファイルは lib フォルダーに残ります。

于 2012-05-13T19:31:42.197 に答える