有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GlassFish 3.1.2.2 war在耳朵里找不到罐子

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

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>

这里将库目录定义为相对于ear根目录的/lib目录,ear根目录正是它所在的位置,但是它没有加载到类路径中,尽管JavaEE5(大概是6)规范说它应该加载到类路径中


共 (2) 个答案

  1. # 1 楼答案

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

    Manifest-Version: 1.0
    Class-Path: lib/myapp-common.jar
    
  2. # 2 楼答案

    事实证明,我引用的是一个包中的类,与我所想的包略有不同。这个包已经不存在了,但是Maven毫无怨言地编译了它。所以我把本地存储库吹走了,然后再试一次。我还是有错误。然后我发现了问题:在myapp中。塔格利布。xml,我仍然在引用myapp common中一个类的旧版本。现在在另一个包中的jar

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