首页 文章

Weblogic 10.3类加载器问题

提问于
浏览
2

Summary

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

应用程序服务器:weblogic 10.3

Maven-war-plugin:2.3

The error

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

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

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

Testing done

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

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

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

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

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

Question

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

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

非常感谢,

User Edit

根据要求,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似乎首先被加载到类路径中 .

2 回答

  • 1

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

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

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

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

  • 0

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

相关问题