GlassFish的3.1.2.2战争找不到耳内罐子(GlassFish 3.1.2.2 war c

2019-09-21 13:44发布

我已经建立了这种结构(这里没有显示所有文件)的耳朵:

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)符合规范说它应加载到类路径中。

Answer 1:

事实证明,我是在一个稍微不同的包比我想象的一个引用的类。 该软件包不再存在,但Maven的是编译它,从无怨言。 所以,我就吹去我的本地库,并再次尝试。 我仍然得到了错误。 然后我发现了问题:在myapp.taglib.xml,我仍然引用旧版本中的myapp-common.jar一类,现在是在不同的包中。

所以教训是:如果你看到ClassNotFoundException ,也期待您的taglib.xml文件(S)。



Answer 2:

请确认您有META-INF/manifest.mf在你的战争文件,包含(类似):

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


文章来源: GlassFish 3.1.2.2 war can't find jar inside ear