diff options
author | Decebal Suiu <decebal.suiu@gmail.com> | 2019-04-12 21:05:03 +0300 |
---|---|---|
committer | Decebal Suiu <decebal.suiu@gmail.com> | 2019-04-12 21:05:03 +0300 |
commit | 74d9637f403e6b2e1db950c62463e05bf2cbc969 (patch) | |
tree | fd4dad731ea1258d0a2b0148289bd2e94b157f9e /pf4j/src | |
parent | 298465d436c34ad181ae00125f44cdbf7ededdc6 (diff) | |
parent | ce4c79380398d0c2280f784cd523dfe31026d671 (diff) | |
download | pf4j-74d9637f403e6b2e1db950c62463e05bf2cbc969.tar.gz pf4j-74d9637f403e6b2e1db950c62463e05bf2cbc969.zip |
Merge remote-tracking branch 'origin/#307' into pf4j_3
Diffstat (limited to 'pf4j/src')
-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 bed6c25..b64ddbb 100644 --- a/pf4j/src/main/java/org/pf4j/DefaultPluginManager.java +++ b/pf4j/src/main/java/org/pf4j/DefaultPluginManager.java @@ -24,6 +24,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()); + } + +} |