0

この構造で耳を作成しました (ここにすべてのファイルが表示されているわけではありません)。

myapp.ear/
    myapp-ejb.jar
    myapp-web.war
    META-INF/
        application.xml
    lib
        myapp-common.jar

問題は、戦争中のコードが myapp-common.jar のクラスを参照しようとすると、 がスローされることjava.lang.ClassNotFoundExceptionです。

の内容に注意してくださいMETA-INF/application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                 http://java.sun.com/xml/ns/javaee/application_6.xsd"
             version="6">
  <display-name>pncr-portal-ear</display-name>
  <module>
    <web>
      <web-uri>myapp-web.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module>
  <module>
    <ejb>myapp-ejb.jar</ejb>
  </module>
  <library-directory>/lib</library-directory>
</application>

ここでは、ライブラリ ディレクトリは/libear のルートからの相対ディレクトリにあると定義されています。これはまさにその場所ですが、Java EE 5 (およびおそらく 6) の仕様では、そうすべきであると述べられているにもかかわらず、クラスパスにロードされません。クラスパスにロードされます。

4

2 に答える 2

0

結局のところ、私は思っていたものとは少し異なるパッケージのクラスを参照していました。パッケージはもう存在しませんでしたが、Maven は文句を言わずにコンパイルしていました。それで、ローカルリポジトリを吹き飛ばして、もう一度やり直しました。私はまだエラーが発生しました。その後、問題が見つかりました。myapp.taglib.xml で、現在は別のパッケージにある myapp-common.jar の古いバージョンのクラスを参照しています。

教訓は次のとおりです。 が表示されている場合はClassNotFoundException、taglib.xml ファイルも調べてください。

于 2012-08-24T07:25:50.183 に答える
-1

META-INF/manifest.mf(次のようなもの) を含む war ファイルがあることを確認します。

Manifest-Version: 1.0
Class-Path: lib/myapp-common.jar
于 2012-08-24T05:55:02.627 に答える