摘要
其应用程序未发生结构性更改或任何代码更改,现在遇到类路径问题。唯一改变的是它所建造的环境(新的太阳能盒子)。
应用程序服务器: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>
答案 0 :(得分:1)
我怀疑你的本地存储库(在你正在构建的机器上)有失效的文件。
尝试删除它,或指定不同的路径(仅为了测试)。例如:
mvn clean package -Dmaven.repo.local=/tmp/repository
如果通过,则修复很简单:删除存储库。
答案 1 :(得分:0)
您可以将URL Class.getProtectionDomain().getCodeSource().getLocation()
(“file:jar:...”)添加到使用过的jar中。我的猜测是应用程序服务器的lib目录中的不同jar。