一般に、モジュールにはバージョン番号が割り当てられる。多くのオープンソースプロジェクトはlog4j-1.2.15.jarのように名付けられたリリースをつくる。これによって開発者は、実行時の手動検査によってではあるが、オープンソースライブラリの特定のあるバージョンが使われているかどうかをクラスパスを調査することによって決定することができる。しかし、プログラムは異なるバージョンのライブラリに対してコンパイルされていることが多い:暗黙の仮定はlog4j-1.2.3.jarに対してコンパイルしてlog4j-1.2.15.jarに対して動かしても挙動としては互換性がある、ということだ。次のマイナーバージョンにアップグレードするだけなら一般には互換性がある(これが log4j 1.3 での問題が結果として互換性のない新しいブランチ 2.0を作り出すことになった理由である)。これらの多くは一般的に制約よ
![Modular Java:それは何なのか?](https://cdn-ak-scissors.b.st-hatena.com/image/square/a59c6f9af9fef0d7eff54b9ed393f21eb972d7e8/height=288;version=1;width=512/https%3A%2F%2Fres.infoq.com%2Farticles%2Fmodular-java-what-is-it%2Fja%2Fsmallimage%2Fimage_cylinder.jpg)