From ce4c79380398d0c2280f784cd523dfe31026d671 Mon Sep 17 00:00:00 2001 From: Decebal Suiu Date: Mon, 1 Apr 2019 22:50:04 +0300 Subject: [PATCH] Add JarPluginManager and ZipPluginManager --- .../java/org/pf4j/DefaultPluginManager.java | 2 + .../main/java/org/pf4j/JarPluginManager.java | 42 ++++++++++++++++++ .../main/java/org/pf4j/ZipPluginManager.java | 43 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 pf4j/src/main/java/org/pf4j/JarPluginManager.java create mode 100644 pf4j/src/main/java/org/pf4j/ZipPluginManager.java diff --git a/pf4j/src/main/java/org/pf4j/DefaultPluginManager.java b/pf4j/src/main/java/org/pf4j/DefaultPluginManager.java index 7e90388..956afeb 100644 --- a/pf4j/src/main/java/org/pf4j/DefaultPluginManager.java +++ b/pf4j/src/main/java/org/pf4j/DefaultPluginManager.java @@ -25,6 +25,8 @@ import java.nio.file.Paths; /** * Default implementation of the {@link PluginManager} interface. + * In essence it is a {@link ZipPluginManager} plus a {@link JarPluginManager}. + * So, it can load plugins from jar and zip, simultaneous. * *

This class is not thread-safe. * diff --git a/pf4j/src/main/java/org/pf4j/JarPluginManager.java b/pf4j/src/main/java/org/pf4j/JarPluginManager.java new file mode 100644 index 0000000..68c50db --- /dev/null +++ b/pf4j/src/main/java/org/pf4j/JarPluginManager.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.pf4j; + +/** + * It's a {@link PluginManager} that loads each plugin from a {@code jar} file. + * Actually, a plugin is a fat jar, a jar which contains classes from all the libraries, + * on which your project depends and, of course, the classes of current project. + * + * @author Decebal Suiu + */ +public class JarPluginManager extends DefaultPluginManager { + + @Override + protected PluginDescriptorFinder createPluginDescriptorFinder() { + return new ManifestPluginDescriptorFinder(); + } + + @Override + protected PluginLoader createPluginLoader() { + return new JarPluginLoader(this); + } + + @Override + protected PluginRepository createPluginRepository() { + return new JarPluginRepository(getPluginsRoot()); + } + +} diff --git a/pf4j/src/main/java/org/pf4j/ZipPluginManager.java b/pf4j/src/main/java/org/pf4j/ZipPluginManager.java new file mode 100644 index 0000000..ed2ea7e --- /dev/null +++ b/pf4j/src/main/java/org/pf4j/ZipPluginManager.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.pf4j; + +/** + * It's a {@link PluginManager} that loads each plugin from a {@code zip} file. + * The structure of the zip file is: + * - {@code lib} directory that contains all dependencies (as jar files); it's optional (no dependencies) + * - {@code classes} directory that contains all plugin's classes + * + * @author Decebal Suiu + */ +public class ZipPluginManager extends DefaultPluginManager { + + @Override + protected PluginDescriptorFinder createPluginDescriptorFinder() { + return new PropertiesPluginDescriptorFinder(); + } + + @Override + protected PluginLoader createPluginLoader() { + return new DefaultPluginLoader(this, pluginClasspath); + } + + @Override + protected PluginRepository createPluginRepository() { + return new DefaultPluginRepository(getPluginsRoot(), isDevelopment()); + } + +}