5

現在、ビルドを手動プロセス (MyEclipse/戦争としてエクスポート) から自動 Maven ビルドに変更しようとしています。

MyEclipse によってビルドされた war アプリケーションは、Tomcat 7.0.29 インストール (Windows 7) にデプロイされ、正常に動作します。MyEclipse ビルド パスで、.NET からのすべての jar を含むユーザー ライブラリ (tomcat) を構成しました$CATALINA_HOME/lib

javax.servlet.http.* クラス (HttpSessionEvent など) を使用するサーブレット リスナーとフィルターがいくつかあります。それらは以下にパッケージ化されていますWEB-INF\classes\com\mycompany\filters

Maven でビルドした war をデプロイするとクラスに乗りNoClassDefFoundErrorますHttpSessionEvent。-verbose:class JVM オプションを使用してトレースを行ったところ、最後にロードされたクラスが c:\apache\webapps\myapp\WEB-INF\classes\com\mycompany\filtersディレクトリからのフィルターであることがわかりました。次に、HttpSessionEvent をロード/検索しようとしましたが、実行できません。

servlet-api.jarもちろん、私のディレクトリ$CATALINA_HOME\libにあります。

私のpom.xmlには、この依存関係があります

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>7.0.29</version>
        <scope>provided</scope>
    </dependency>

パス/クラスパスのどこにも他のservlet-api.jarファイルはありません(jdkとjreのlib/extおよび承認されたディレクトリも再確認しました)

私のmaven依存関係:ツリーは次のようになります:

[INFO] +- log4j:log4j:jar:1.2.15:compile
[INFO] |  \- javax.mail:mail:jar:1.4:compile
[INFO] +- jstl:jstl:jar:1.2:compile
[INFO] +- org.jdom:jdom:jar:1.1:provided
[INFO] +- com.sun.xml.rpc:jaxrpc-impl:jar:1.1.3_01:provided
[INFO] |  +- javax.xml:jaxrpc-api:jar:1.1:provided
[INFO] |  +- com.sun.xml.messaging.saaj:saaj-impl:jar:1.3:provided
[INFO] |  |  \- javax.xml.soap:saaj-api:jar:1.3:provided
[INFO] |  +- com.sun.xml.rpc:jaxrpc-spi:jar:1.1.3_01:provided
[INFO] |  \- com.sun.xml.fastinfoset:FastInfoset:jar:1.0.2:provided
[INFO] +- org.apache.lucene:lucene-core:jar:3.6.0:compile
[INFO] +- org.springframework:spring-context:jar:3.1.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-beans:jar:3.1.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-core:jar:3.1.0.RELEASE:compile
[INFO] |  |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- org.springframework:spring-expression:jar:3.1.0.RELEASE:compile
[INFO] |  \- org.springframework:spring-asm:jar:3.1.0.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:3.1.0.RELEASE:compile
[INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-orm:jar:3.1.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-jdbc:jar:3.1.0.RELEASE:compile
[INFO] |  \- org.springframework:spring-tx:jar:3.1.0.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:3.1.0.RELEASE:compile
[INFO] +- org.springframework:spring-test:jar:3.1.0.RELEASE:test
[INFO] +- org.aspectj:aspectjrt:jar:1.7.1:compile
[INFO] +- org.aspectj:aspectjweaver:jar:1.7.1:compile
[INFO] +- javax.faces:javax.faces-api:jar:2.1:compile
[INFO] +- com.sun.faces:jsf-impl:jar:2.1.15:compile
[INFO] +- org.primefaces:primefaces:jar:3.4.2:compile
[INFO] +- org.richfaces.core:richfaces-core-api:jar:4.2.3.Final:compile
[INFO] |  \- com.google.guava:guava:jar:11.0.2:compile
[INFO] |     \- com.google.code.findbugs:jsr305:jar:1.3.9:compile
[INFO] +- org.richfaces.ui:richfaces-components-ui:jar:4.2.3.Final:compile
[INFO] |  \- org.richfaces.ui:richfaces-components-api:jar:4.2.3.Final:compile
[INFO] +- org.apache.tomcat:tomcat-servlet-api:jar:7.0.29:provided
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.2:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.2:compile
[INFO] +- org.hibernate:hibernate-core:jar:3.6.2.Final:compile
[INFO] |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
[INFO] |  \- javax.transaction:jta:jar:1.1:compile
[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.6.2.Final:compile
[INFO] |  +- cglib:cglib:jar:2.2:compile
[INFO] |  |  \- asm:asm:jar:3.1:compile
[INFO] |  \- javassist:javassist:jar:3.12.0.GA:compile
[INFO] +- org.hibernate:hibernate-validator:jar:4.1.0.Final:compile
[INFO] |  \- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] +- org.apache.commons:commons-email:jar:1.2:compile
[INFO] |  \- javax.activation:activation:jar:1.1:compile
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] \- com.h2database:h2:jar:1.3.170:test

私はこれをインターネットでしばらく検索してきましたが、私が読んだことから、これは tomcat クラスローダーと関係があるに違いありません。私の戦争のパッケージングに問題がある可能性が非常に高い. しかし、私はまだ解決策を見つけていません。

どんなポインタでも大歓迎です!

4

2 に答える 2

0

Tomcat でのクラスローディングは、理解に役立ちます。

jar を/WEB-INF/libに配置します

アプリケーション クラスローダー — クラス ローダーは、単一の Tomcat インスタンスにデプロイされる Web アプリケーションごとに作成されます。Web アプリケーションの /WEB-INF/classes ディレクトリにあるすべてのアンパックされたクラスとリソース、および Web アプリケーションの /WEB-INF/lib ディレクトリにある JAR ファイルのクラスとリソースは、この Web アプリケーションから見えるようになりますが、他の人に。

于 2012-12-07T13:39:09.797 に答える
0

WEB-INF/libビルドされた .war が存在しないことを確認しましservlet-api.jarたか? 私が知る限り、Maven の依存関係には適切なスコープがあります。

pom.xml のbuildセクションは次のようになります。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <warName>war_name</warName>
            </configuration>
        </plugin>
    </plugins>
</build>

servlet-api.jarいいえ、 Web アプリのWEB-INF/libフォルダーに入れないでください。また、Tomcat ユーザー ライブラリは必要ないと思います。必要なライブラリはJRE System Library xxMaven と MavenだけDependenciesです。

于 2012-12-07T13:37:37.810 に答える