WebLogic NoClassDefFoundError甚至包含<prefered-application-packages>

时间:2017-05-19 15:17:04

标签: java weblogic noclassdeffounderror

我在QA服务器上运行代码时得到NoClassDefFoundError,但是localy(使用Eclipse)运行得很好。

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/csv/CSVFormat

我在另一个使用<wls:prefer-application-packages>属性修复的项目中遇到过这个问题。我检查了EAR文件,并且构建中存在Apache CSV .jar,我也确实正确设置了首选的应用程序包。

这是我的weblogic-application.xml。只有org.apache.*应该足够了,但它没有用,所以我添加了完整的Apache CSV包。

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application"
    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/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.0/weblogic-application.xsd">

    <wls:prefer-application-packages>
        <wls:package-name>org.apache.*</wls:package-name>
        <wls:package-name>org.apache.commons.*</wls:package-name>
        <wls:package-name>org.apache.commons.csv.*</wls:package-name>
    </wls:prefer-application-packages>

    <wls:prefer-application-resources>
        <wls:resource-name>org.apache.*</wls:resource-name>
    </wls:prefer-application-resources>

</wls:weblogic-application>

我的EAR POM声明编译依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.4</version>
</dependency>

EJB模块POM按提供的方式使用它:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.4</version>
    <scope>provided</scope>
</dependency>

为了确保我检查了由Maven生成的EAR构建文件,我们将其部署到QA中,并且将Apache CSV jar捆绑在de EAR文件中:

enter image description here

weblogic-application.xml文件也出现在EAR文件的META-INF文件夹下:

enter image description here

即便如此,我还是NoClassDefFoundError。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

添加<defaultLibBundleDir>lib</defaultLibBundleDir>,告诉Maven正确创建application.xml

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.10.1</version>
    <configuration>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <version>5</version>
    </configuration>
</plugin>

使用该信息创建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_5.xsd" version="5">
  <!-- modules -->
  <library-directory>lib</library-directory>
</application>