多くのJavaパッケージには、api、impl、bundle jar(name-api.jar、name-impl.jar、name-bundle.jar)があります。誰かがその意味を説明できますか? 3つすべてがアプリに必要ですか?多くの場合、目的は何ですか:api.jar + impl.jar + bundle.jar?
答えて
アイデアは、アプリケーションの依存関係を分けることができるということです。アプリケーションをより移植性のあるものにするための試みである。コンパイル時にアプリケーションをapi.jar
に依存させることができます。次に、プログラムを実行する場合は、適切なインプリメンテーション・ジャー(impl.jar
)と適切なリソース・バンドル・ジャー(bundle.jar
)を切り替えます。
例として、ライブラリがデータベースとのやり取りを行うとします。 api.jar
を参照するようにコードを記述します。たとえば、特定のタイプのデータベースで作業する必要があるとします。 MySQL - MySQLデータベース固有のimpl.jar
をクラスパスに追加すると、クラスパスが機能します(後で別のデータベースが必要な場合は、そのクラスパスをクラスパスで切り替えるだけです)。
bundle.jar
はもう少しわかりにくく、一般的ではありません。これは、ライブラリの構成設定を提供するために使用できます。たとえば、言語固有の設定や、より具体的な設定を提供するために使用できます。データベースライブラリの場合、実装はMySQLのすべてのバージョン用に設計されており、リソースバンドルjarは特定のMySQLバージョンで動作するように設定ファイルを提供します。
:
name-api.jar
は、APIのインタフェースのみが含まれています。name-impl.jar
はname-bundle.jar
は、Javaアプリケーションを実行するために必要なすべてのクラスで、すべてをバンドル名-api.jarの内のすべてのインターフェイスの実装を提供します。
私はこのような配置を見たことがありません。
デザイナーがアプリを3つのJARにパッケージ化した場合、3つすべてが必要であると言えます。
しかし、デザイナーが選択したものであることを認識する必要があります。それは可能性があるs /彼はそれのすべてを持つ単一のJARを作成することができたとあなたは誰も賢明ではないだろう。
私は今は推測していますが、それらのJARを開く場合は、API JARのインタフェース、impl JARのインタフェースの実装、バンドルJARのリソース・バンドルおよびその他の.propertiesファイルのみが表示されます。それを試してみてください。あなたは何かを学ぶでしょう。
api.jar
にはAPIインターフェイスが含まれています。これらは、APIの実装に従うべき契約のインターフェースです。
impl.jar
は、api.jar
の実装です。 api.jar
のないimpl.jar
を持つことはできません。
bundle.jar
(私が間違っていない場合は)リソースです。これらは、実行に必要な実装コードに必要なリソースです。
- 1. 実行中にjsf-api.jarとjsf-impl.jarがどのように相互接続されていますか?
- 2. 静的な目的は何ですか?
- 3. Mongoclientとは何ですか?その目的は何ですか?
- 4. Ember.Containerの目的は何ですか
- 5. マーカーインターフェイスの目的は何ですか?
- 6. jquery.mobile.structureの目的は何ですか?
- 7. データベースピボット - 目的は何ですか?
- 8. オペレータ "^"の目的は何ですか?
- 9. htmlテーブル、目的は何ですか?
- 10. AccountManager(アンドロイド)の目的は何ですか?
- 11. SetDefaultFieldSortScoringの目的は何ですか?
- 12. Dockerビルドコンテキストの目的は何ですか?
- 13. Newtonsoft.Json.JsonToken.StartConstructorトークンの目的は何ですか?
- 14. SDL_opengl_glext.hの目的は何ですか?
- 15. Expressionクラスの目的は何ですか?
- 16. Control.GetPreferredSizeメソッドの目的は何ですか?
- 17. durandalの目的は何ですか?
- 18. Ember.js - Ember.lookupの目的は何ですか
- 19. IEnumeratorの目的は何ですか
- 20. `__metaclass__ = type`の目的は何ですか?
- 21. デルファイ:icontentの目的は何ですか?
- 22. ApplicationBuilder.Propertiesの目的は何ですか?
- 23. EasyMock.andVoid()の目的は何ですか?
- 24. PHPロギングフレームワークの目的は何ですか?
- 25. ボイドキャストの目的は何ですか?
- 26. グント:cwdの目的は何ですか?
- 27. データセットの目的は何ですか?
- 28. React-Router:IndexRouteの目的は何ですか?
- 29. Objects.compare()メソッドの目的は何ですか?
- 30. php umask(0)目的は何ですか