クラスローダの動作について興味深い質問があります。
質問 1:クラスローダが jar をロードする順序は?
次の jar とそれを含むクラスが提供されます。
a.jar
+-com/scheffield/foo/A.class
b.jar
+-com/scheffield/foo/B.class
どのクラスがロードされますか?
質問 2:クラスパス内のファイルのパスと名前が一意であるというのは本当ですか?
次の jar とそれを含むクラスが提供されます (実際の例):
spring-beans-3.0.3.RELEASE.jar
+-META-INF/spring.schemas
spring-aop-3.0.3.RELEASE.jar
+-META-INF/spring.schemas
私が言えることは、Spring によって両方のファイルがロードされるということです。そうしないと、例外が発生します (この記事を参照)。
なぜ私はそれを求めているのですか:
いわゆるビッグジャー(グラドルのクックブックエントリ)を作成しました。これは、アプリケーション クラスと他のすべての依存関係が解凍され、大きな jar にパケット化された jar です。そして、重複したファイルをどうするかは絶対にわかりません。