GlassFish 3.1.2.2战争中找不到jar内耳

时间:2012-08-24 05:42:55

标签: java java-ee glassfish java-ee-6 glassfish-3

我已经用这种结构构建了一个耳朵(不是这里显示的所有文件):

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>

库目录在这里被定义为相对于耳根的/lib目录,它正是它的位置,但它没有加载到类路径中,尽管Java EE 5(并且可能是6)规范说它应该加载到类路径中。

2 个答案:

答案 0 :(得分:0)

事实证明,我引用的课程与我想象的课程略有不同。包裹不再存在,但Maven正在编译它而没有抱怨。所以我吹走了我的本地存储库并再次尝试。我还是得到了错误。然后我发现了问题:在myapp.taglib.xml中,我仍然引用myapp-common.jar中现在位于不同包中的旧版本的类。

所以教训是:如果你看到ClassNotFoundException,也要查看你的taglib.xml文件。

答案 1 :(得分:-1)

确认您的war文件中包含META-INF/manifest.mf,包含(类似):

Manifest-Version: 1.0
Class-Path: lib/myapp-common.jar