の選択肢があります:
- は、プロジェクトを保ちます単一のモジュール内にあり、オプションの依存関係を使用する。
- プロジェクトを複数のモジュールに分割します。各モジュールは任意のライブラリへの(オプションではなく)依存関係を持ちます。
ほとんどの場合、最初の方が理にかなっていると思います。ユーザーは、人工物の数を減らす必要があります。典型的には、新しい依存関係をpomに追加する必要があります。サードパーティのプロジェクトをサポートするコードが大きい場合を除き、ダウンロード時間の短縮に役立ちます(往復回数の削減)。後者のアプローチでは、ユーザーが独自のバージョンセットを定義しているが、サードパーティの依存関係の一部に対してのみ、不自然な状況にいることがあります。
私は、pomのオプションの依存関係を見ることが好きです(私は時にはそれがどのバージョンのものかを見ています)。一部の人々が見ないかもしれないことは事実です。私は、コピー&ペースト可能なポッドスニペットは、ウェブサイト上の最適な解決策だと思う。たとえば、Springの統合に関するページがある場合は、関連するpomスニペットをそのページに配置できます。
非自由な依存関係(または簡単には解決できないもの)を別のMavenモジュールに保存して、コントリビュータが常にプライマリアーティファクトを作成できるようにすることをお勧めします。 (私はIIRCがOracle JDBC jarにオプションの依存関係を持つQuartzに問題があった)。
編集:あなたは、ユーザーがNoClassDefFoundErrorsを見て心配している場合、それはクラスがそれを使用しようとする前に解決できることを確認するために、任意の害をしないだろう。たとえば、例外を指定して、ユーザにドキュメントを指示する意味のあるエラーメッセージを表示することができます。 SLF4Jはこれの良い例です。
**更新:**ちょうど明確にするために、私はわからない程度だ事が ある - POMデザイン - ...対の両方の対複数のモジュール対反射 - 追加モジュールの自動検出かどうか、彼らが存在する場合/場合はい、どのように - ... –
更新:http://www.axelfontaine.com/2012/08/optional-dependency-strategies-for-java:私は最終的にこのことについて包括的なブログ記事を書くことに周りに来ています。 html –