WebLogic NoClassDefFoundError 即使 <prefered-application-packages>
WebLogic NoClassDefFoundError even with <prefered-application-packages>
我在 QA 服务器中 运行 我的代码时出现 NoClassDefFoundError,但在本地(使用 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>
为了确保我检查了我们部署到 QA 中的 Maven 生成的 EAR 构建文件,Apache CSV jar 捆绑在 de EAR 文件中:
并且 weblogic-application.xml 文件也存在于 EAR 文件的 META-INF 文件夹下:
即便如此,我还是 NoClassDefFoundError
。有什么想法吗?
添加告诉 Maven 正确创建 application.xml
的 <defaultLibBundleDir>lib</defaultLibBundleDir>
。
<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>
我在 QA 服务器中 运行 我的代码时出现 NoClassDefFoundError,但在本地(使用 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>
为了确保我检查了我们部署到 QA 中的 Maven 生成的 EAR 构建文件,Apache CSV jar 捆绑在 de EAR 文件中:
并且 weblogic-application.xml 文件也存在于 EAR 文件的 META-INF 文件夹下:
即便如此,我还是 NoClassDefFoundError
。有什么想法吗?
添加告诉 Maven 正确创建 application.xml
的 <defaultLibBundleDir>lib</defaultLibBundleDir>
。
<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>