diff options
author | Decebal Suiu <decebal.suiu@gmail.com> | 2019-04-01 22:50:04 +0300 |
---|---|---|
committer | Decebal Suiu <decebal.suiu@gmail.com> | 2019-04-01 22:50:04 +0300 |
commit | ce4c79380398d0c2280f784cd523dfe31026d671 (patch) | |
tree | 1830302676b5bdf61ba2233e17e3c9351c1566f3 /pf4j | |
parent | 6addff34e21dbcd784d38f8b8c5c6259a42b2613 (diff) | |
download | pf4j-ce4c79380398d0c2280f784cd523dfe31026d671.tar.gz pf4j-ce4c79380398d0c2280f784cd523dfe31026d671.zip |
Add JarPluginManager and ZipPluginManager#307
Diffstat (limited to 'pf4j')
-rw-r--r-- | pf4j/src/main/java/org/pf4j/DefaultPluginManager.java | 2 | ||||
-rw-r--r-- | pf4j/src/main/java/org/pf4j/JarPluginManager.java | 42 | ||||
-rw-r--r-- | pf4j/src/main/java/org/pf4j/ZipPluginManager.java | 43 |
3 files changed, 87 insertions, 0 deletions
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. * * <p>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()); + } + +} |