2

概要

アプリケーションが構造的に変更されていないか、コードが変更されていないため、クラスパスの問題が発生しています。変更されたのは、それが組み込まれた環境 (新しいソラリス ボックス) だけです。

アプリケーション サーバー: weblogic 10.3

Maven-war-プラグイン: 2.3

エラー

アプリケーション戦争内には、同じクラスの異なるバージョンを持つ 2 つの依存関係があり、1 つのバージョンには特定のコンストラクターがありません...これがどこに向かっているのかがわかります。クラスの間違ったバージョン (コンストラクターがない) がターゲットにされているため、実行時エラーが発生しています。

これはMavenプロジェクトであり、依存関係は、コンパイル時にこのクラスの正しいバージョンが最初にクラスパスに表示されるように順序付けられています。

現在わかっている限り、変更されたのは、ビルド部門が war ファイルをビルドする新しいビルド ボックスだけです。

テスト完了

自分のローカル環境 (Windows) で war を作成し、それを weblogic 環境サーバー (UNIX ボックス) にデプロイしても問題ありません。

ただし、ビルド ボックス (solaris) でビルドし、同じ環境にデプロイすると、問題が発生します。

2 つの war ファイルを比較しましたが、違いはありません。

私が疑ったこと(クラスパスで最初に間違ったクラスにヒットしたこと)を確認するために、間違ったバージョンを除いてパッケージをビルドしましたが、驚くべきことにそれが機能しました。Weblogic クラスローダは明らかに、この不適切なクラスを他のクラスよりも先にロードしています。

問題はまだ残っているので、これが突然発生する原因を特定する必要があります。

質問

libのどの依存関係を最初にロードするかを決定するという点で、weblogicのクラスローダーのルールは何ですか?

そして、マニフェストのバージョン番号を除いてまったく同じである 2 つの異なる戦争の間で、この動作がどのように変更された可能性があるのでしょうか?

どうもありがとう、

ユーザー編集

要求された 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 が最初にクラスパスにロードされているようです。

4

2 に答える 2

1

ローカルリポジトリ(構築しているマシン上)に、障害が発生している古いアーティファクトがあると思われます。

それを削除するか、別のパスを指定してみてください(テストのためだけに)。例えば:

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

それが合格した場合、修正は簡単です。リポジトリを削除します。

于 2013-03-05T12:22:36.580 に答える
0

使用した jar への URL Class.getProtectionDomain().getCodeSource().getLocation()(「file:jar:...」) を取得できます。私の推測では、アプリケーション サーバーの lib ディレクトリにある別の jar です。

于 2013-03-05T15:11:24.767 に答える