Weblogic 10.3类加​​载器问题

时间:2013-03-05 12:08:11

标签: java maven classpath weblogic-10.x maven-war-plugin

摘要

其应用程序未发生结构性更改或任何代码更改,现在遇到类路径问题。唯一改变的是它所建造的环境(新的太阳能盒子)。

应用程序服务器:weblogic 10.3

Maven-war-plugin:2.3

错误

在应用程序中,战争的2个依赖项具有相同类的不同版本,一个版本缺少某个构造函数...您可以看到它的位置。我们收到运行时错误,因为该类的错误版本(缺少构造函数)正在被定位。

现在这是一个maven项目,依赖项的排序方式是在编译时首先在类路径中显示该类的正确版本。

据我们现在所知,所有改变的都是新的构建框,构建部门构建war文件。

测试完成

如果我在自己的本地环境(Windows)上创建战争并将其部署到weblogic环境服务器(unix框),则没有问题。

然而,当它构建在构建盒(solaris)上,然后我将它部署到同一个环境时,我就会遇到问题。

我比较了两个战争文件并发现没有差异。

为了确认我怀疑的东西(在类路径上首先击中了错误的类)我构建了不包含错误版本的软件包,并且令人惊讶的是它有效。 weblogic类加载器显然是在另一个之前加载这个不正确的类。

问题仍然存在,我需要确定现在突然发生的原因。

问题

在决定首先加载lib中的哪个依赖关系方面,weblogic的类加载器有哪些规则?

除了MANIFEST中的版本号之外,两种不同战争之间的这种行为可能会发生什么变化?

非常感谢,

用户编辑

根据要求提供Maven依赖树:

[INFO] com.xxx.web:adminapp:war:100462.7
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- struts:struts:jar:1.2.4:compile
[INFO] |  +- commons-beanutils:commons-beanutils:jar:1.6.1:compile
[INFO] |  +- commons-collections:commons-collections:jar:2.1:compile
[INFO] |  +- commons-digester:commons-digester:jar:1.5:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- commons-validator:commons-validator:jar:1.1.3:compile
[INFO] |  +- oro:oro:jar:2.0.7:compile
[INFO] |  +- antlr:antlr:jar:2.7.2:compile
[INFO] |  \- commons-lang:commons-lang:jar:2.6:compile (version managed from 2.0)
[INFO] +- displaytag:displaytag:jar:1.2:compile
[INFO] |  +- com.lowagie:itext:jar:1.3:compile
[INFO] |  +- org.slf4j:jcl104-over-slf4j:jar:1.4.2:compile
[INFO] |  \- org.slf4j:slf4j-log4j12:jar:1.4.2:compile
[INFO] |     +- org.slf4j:slf4j-api:jar:1.4.2:compile
[INFO] |     \- log4j:log4j:jar:1.2.13:compile
[INFO] +- taglibs:request:jar:1.0.1:compile
[INFO] +- org.apache.poi:poi:jar:3.8:compile
[INFO] |  \- commons-codec:commons-codec:jar:1.4:compile (version managed from 1.5)
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- javax.servlet:jsp-api:jar:2.0:provided
[INFO] +- com.xxx.busservices:cdm:jar:623377.7:compile
[INFO] +- com.xxx.busservices:homeratingservice-java-client:jar:1011147.2:compile
[INFO] +- com.xxx.busservices:motorratingservice-java-client:jar:1011147.2:compile
[INFO] +- com.xxx.techservices:entrefdata-java-client:jar:1011147.2:compile
[INFO] +- com.xxx.techservices:auditservice-java-client:jar:626434.4:compile
[INFO] +- com.xxx.framework:framework:jar:626434.4:compile
[INFO] +- com.xxx.ibis:xxx-logging:jar:956942.1:compile
[INFO] +- weblogic:wlfullclient:jar:10.3:provided
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2.2:compile
[INFO] \- commons-io:commons-io:jar:2.1:compile

cdm.jar包含一个名为FactorValueLite的类,它是正确的版本,在motorratingservice-java-client.jar内也存在这个类错误的版本,这个jar似乎首先被加载到类路径中。 / p>

2 个答案:

答案 0 :(得分:1)

我怀疑你的本地存储库(在你正在构建的机器上)有失效的文件。

尝试删除它,或指定不同的路径(仅为了测试)。例如:

mvn clean package -Dmaven.repo.local=/tmp/repository

如果通过,则修复很简单:删除存储库。

答案 1 :(得分:0)

您可以将URL Class.getProtectionDomain().getCodeSource().getLocation()(“file:jar:...”)添加到使用过的jar中。我的猜测是应用程序服务器的lib目录中的不同jar。