私があなたを理解する限り。プラグイン システムを構築したい。その場合は、Java サービス プロバイダーのアプローチを検討する必要があります。
このアプローチでは、メイン パッケージでサービス プロバイダー インターフェイス (SPI) を定義し、Java META-INF/services の場所を使用して実装を検索します。この場合、jar ファイルをクラスパスに配置するだけで拡張機能を追加できます。
Java 1.6 以降では、java.util.ServiceLoader を使用できます。
または、Apache Discovery
http://commons.apache.org/proper/commons-discovery/apidocs/org/apache/commons/discovery/tools/Service.htmlをご覧ください。
インスタンス化するサービスにコンストラクター引数を渡すことができるため、java.util.SerivceLoader よりも強力です。
考えられるプラグイン ローダーの実装は次のようになります。
public interface ServiceInterface {
}
public class PluginHost {
public ServiceLoader<ServiceInterface> loadPlugins() {
File[] pluginLibraries = getPluginLibraries();
URL[] pluginLibUrls = new URL[pluginLibraries.length];
for (int i = 0; i < pluginLibUrls.length; i++) {
try {
pluginLibUrls[i] = pluginLibraries[i].toURI().toURL();
} catch (MalformedURLException e) {
throw new IllegalStateException("Unable to load plugin: "
+ pluginLibraries[i], e);
}
}
URLClassLoader pluginsClassLoader = new URLClassLoader(pluginLibUrls,
ServiceInterface.class.getClassLoader());
ServiceLoader<ServiceInterface> serviceLoader = ServiceLoader.load(
ServiceInterface.class, pluginsClassLoader);
return serviceLoader;
}
private File[] getPluginLibraries() {
// please implement
}
}