私はいくつかのMavenモジュールで構成されるライブラリ用の拡張モジュールを書いています。私は1つのモジュールの上にいくつかの機能を追加する必要がありますが、誰かが私の拡張子(典型的な使用例)なしでこのモジュールを使いたい場合に備えて、不要な依存性を追加したくありません。別のモジュールにランタイム依存関係を追加するにはどうすればいいですか?
私が考えることができる1つの解決策は、拡張モジュールで別のモジュールを作成し、リフレクションを使用してそのクラスからメソッドを呼び出そうとすることです。
try {
Class.forName("my.package.Foo", false, getClass().getClassLoader());
// extension will be enabled and some method will be called using reflection
} catch(ClassNotFoundException e) {
// extension will be disabled
}
このクラスのメソッドは、クラスパス上にある場合にのみ呼び出されます。拡張モジュールは、モジュールにMaven依存関係を追加した場合(拡張モジュールへの依存性に加えて)、Maven依存関係を追加すると有効になります。
しかし、これは最善のアプローチのようには聞こえません。この問題に対して、より洗練されたソリューションがありますか?