1

これは、そこにあるものについての質問でありIvy. class-level依存関係ではなく、パッケージの依存関係について言及できるものはありますpackage levelか?
たとえば、すべての依存関係をリストapache-xyxy packageする が付属している があるとします。ivy.xmlしかしWX、これらの依存関係のほとんどを必要としない apache-xyxy でのみクラスを使用するとします。リゾルバーはインテリジェントになれませんでしたまた、クラス WX が他のクラス (AB、DC、EF) のセットを呼び出すことしかできないことを確認し、それらのクラスのいずれも他の依存関係を使用せず、必要な依存関係の最小限のサブセットを作成しますか? これは、そのパッケージで使用されている特定のクラスのために不要なパッケージの依存関係を削除するためのチェリーピッキングよりも簡単で安全です。また、この理由だけで、いくつかの大きなパッケージを小さなパッケージに分割することも防ぎます。

その後、後で apache-xyxy のクラス GH を使用することにした場合、ivy の解決を行うことができ、追加の必要なライブラリが動的に取り込まれます。

4

1 に答える 1

2

配布用にコンパイル済みの Java コードをパッケージ化する場合、Java の「パッケージ」をまとめてバンドルするのが一般的です。Java パッケージを複数の jar に分割することも可能です (しかしばかげています)。大規模なフレームワーク (Spring など) には、実行時に必要なものをユーザーが選択できるように、さまざまな jar に多数のサブパッケージがあります。もちろん、jar オプションが多ければ多いほど、実行時のクラスパス...

ここでのキーワードは「実行時」です... Apache ivyApache Mavenなどのツールは、主にビルド​​時に必要な依存関係を管理するように設計されています....

Apache Mavenには、依存関係のために「ランタイム」スコープがありますが、jar の単一のリストに制限されています。通常、このスコープは、WAR ファイルの lib ディレクトリをテストおよび設定するために必要な jar を決定するために使用されます。

Apache ivyには、「構成」と呼ばれる同様のより柔軟なメカニズムがあります。必要な数のランタイム構成を作成することが可能であり、これらを使用して、ivy によってダウンロードされる jar を決定できます。したがって、ivy に答えがあるように見えますが、プログラムを起動するときに ivy が使用されているのを見たことはほとんどありません (唯一の例外は、Groovy のGrape 注釈です) 。

答えは何ですか?

「ランタイム」クラスパス管理の将来は、OSGIまたはプロジェクト ジグソーです。私は、jar ファイルのマニフェストに特別な依存関係インジケーターが追加され、その依存関係が何であるかを示す OSGI に精通しています。これは、コンテナーが jar (「バンドル」と呼ばれる) をロードするときに、他の依存関係が既にロードされているかどうかをチェックして確認できるという考え方です。これらの依存関係は、共通のリポジトリから取得およびロードできます。これは、Java を起動するための根本的に異なる方法です。伝統的に、各アプリケーションは独自の分離されたクラスパスにロードされます.....

いずれかのプロジェクトが成功するかどうかは時がたてばわかります。当面は、Apache ivyApache Mavenを使用して、自己完結型で肥大化する可能性のある WAR (EAR など) パッケージを構築します。

于 2012-07-11T19:20:20.503 に答える