language: java | language: java | ||||
jdk: | jdk: | ||||
- oraclejdk7 | |||||
- openjdk7 | |||||
# JDK7 is not supported anymore; https://github.com/travis-ci/travis-ci/issues/7884#issuecomment-308451879 | |||||
# - oraclejdk7 | |||||
- oraclejdk8 | |||||
after_success: | after_success: | ||||
- mvn clean cobertura:cobertura coveralls:report | - mvn clean cobertura:cobertura coveralls:report |
[![Join the chat at https://gitter.im/decebals/pf4j](https://badges.gitter.im/decebals/pf4j.svg)](https://gitter.im/decebals/pf4j?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | [![Join the chat at https://gitter.im/decebals/pf4j](https://badges.gitter.im/decebals/pf4j.svg)](https://gitter.im/decebals/pf4j?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||||
[![Travis CI Build Status](https://travis-ci.org/decebals/pf4j.png)](https://travis-ci.org/decebals/pf4j) | [![Travis CI Build Status](https://travis-ci.org/decebals/pf4j.png)](https://travis-ci.org/decebals/pf4j) | ||||
[![Coverage Status](https://coveralls.io/repos/decebals/pf4j/badge.svg?branch=master&service=github)](https://coveralls.io/github/decebals/pf4j?branch=master) | [![Coverage Status](https://coveralls.io/repos/decebals/pf4j/badge.svg?branch=master&service=github)](https://coveralls.io/github/decebals/pf4j?branch=master) | ||||
[![Maven Central](http://img.shields.io/maven-central/v/ro.fortsoft.pf4j/pf4j.svg)](http://search.maven.org/#search|ga|1|pf4j) | |||||
[![Maven Central](http://img.shields.io/maven-central/v/org.pf4j/pf4j.svg)](http://search.maven.org/#search|ga|1|pf4j) | |||||
A plugin is a way for a third party to extend the functionality of an application. A plugin implements extension points | A plugin is a way for a third party to extend the functionality of an application. A plugin implements extension points | ||||
declared by application or other plugins. Also a plugin can define extension points. | declared by application or other plugins. Also a plugin can define extension points. | ||||
**NOTE:** Starting with version 0.9 you can define an extension directly in the application jar (you're not obligated to put the extension in a plugin - you can see this extension as a default/system extension). See [WhazzupGreeting](https://github.com/decebals/pf4j/blob/master/demo/app/src/main/java/ro/fortsoft/pf4j/demo/WhazzupGreeting.java) for a real example. | |||||
**NOTE:** Starting with version 0.9 you can define an extension directly in the application jar (you're not obligated to put the extension in a plugin - you can see this extension as a default/system extension). See [WhazzupGreeting](https://github.com/decebals/pf4j/blob/master/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java) for a real example. | |||||
Features/Benefits | Features/Benefits | ||||
------------------- | ------------------- | ||||
```xml | ```xml | ||||
<dependency> | <dependency> | ||||
<groupId>ro.fortsoft.pf4j</groupId> | |||||
<groupId>org.pf4j</groupId> | |||||
<artifactId>pf4j</artifactId> | <artifactId>pf4j</artifactId> | ||||
<version>${pf4j.version}</version> | <version>${pf4j.version}</version> | ||||
</dependency> | </dependency> | ||||
Created-By: Apache Maven | Created-By: Apache Maven | ||||
Built-By: decebal | Built-By: decebal | ||||
Build-Jdk: 1.6.0_17 | Build-Jdk: 1.6.0_17 | ||||
Plugin-Class: ro.fortsoft.pf4j.demo.welcome.WelcomePlugin | |||||
Plugin-Class: org.pf4j.demo.welcome.WelcomePlugin | |||||
Plugin-Dependencies: x, y, z | Plugin-Dependencies: x, y, z | ||||
Plugin-Id: welcome-plugin | Plugin-Id: welcome-plugin | ||||
Plugin-Provider: Decebal Suiu | Plugin-Provider: Decebal Suiu | ||||
Plugin-Version: 0.0.1 | Plugin-Version: 0.0.1 | ||||
``` | ``` | ||||
In above manifest I described a plugin with id `welcome-plugin`, with class `ro.fortsoft.pf4j.demo.welcome.WelcomePlugin`, with version `0.0.1` and with dependencies | |||||
In above manifest I described a plugin with id `welcome-plugin`, with class `org.pf4j.demo.welcome.WelcomePlugin`, with version `0.0.1` and with dependencies | |||||
to plugins `x, y, z`. | to plugins `x, y, z`. | ||||
**NOTE:** The plugin version must be compliant with [Semantic Versioning](http://semver.org) (PF4J uses `jsemver` as implementation for SemVer because it comes with support for comparing versions) | **NOTE:** The plugin version must be compliant with [Semantic Versioning](http://semver.org) (PF4J uses `jsemver` as implementation for SemVer because it comes with support for comparing versions) | ||||
and in plugin repository you must have a plugin.properties file with the below content: | and in plugin repository you must have a plugin.properties file with the below content: | ||||
``` | ``` | ||||
plugin.class=ro.fortsoft.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.class=org.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.dependencies=x, y, z | plugin.dependencies=x, y, z | ||||
plugin.id=welcome-plugin | plugin.id=welcome-plugin | ||||
plugin.provider=Decebal Suiu | plugin.provider=Decebal Suiu | ||||
<version>2.5.1</version> | <version>2.5.1</version> | ||||
<configuration> | <configuration> | ||||
<annotationProcessors> | <annotationProcessors> | ||||
<annotationProcessor>ro.fortsoft.pf4j.processor.ExtensionAnnotationProcessor</annotationProcessor> | |||||
<annotationProcessor>org.pf4j.processor.ExtensionAnnotationProcessor</annotationProcessor> | |||||
</annotationProcessors> | </annotationProcessors> | ||||
</configuration> | </configuration> | ||||
</plugin> | </plugin> | ||||
Plugin lifecycle | Plugin lifecycle | ||||
-------------------------- | -------------------------- | ||||
Each plugin passes through a pre-defined set of states. [PluginState](https://github.com/decebals/pf4j/blob/master/pf4j/src/main/java/ro/fortsoft/pf4j/PluginState.java) defines all possible states. | |||||
Each plugin passes through a pre-defined set of states. [PluginState](https://github.com/decebals/pf4j/blob/master/pf4j/src/main/java/org/pf4j/PluginState.java) defines all possible states. | |||||
The primary plugin states are: | The primary plugin states are: | ||||
* CREATED | * CREATED | ||||
* DISABLED | * DISABLED | ||||
First, you can change the runtime mode using the "pf4j.mode" system property or overriding `DefaultPluginManager.getRuntimeMode()`. | First, you can change the runtime mode using the "pf4j.mode" system property or overriding `DefaultPluginManager.getRuntimeMode()`. | ||||
For example I run the pf4j demo in eclipse in DEVELOPMENT mode adding only `"-Dpf4j.mode=development"` to the pf4j demo launcher. | For example I run the pf4j demo in eclipse in DEVELOPMENT mode adding only `"-Dpf4j.mode=development"` to the pf4j demo launcher. | ||||
You can retrieve the current runtime mode using `PluginManager.getRuntimeMode()` or in your Plugin implementation with `getWrapper().getRuntimeMode()`(see [WelcomePlugin](https://github.com/decebals/pf4j/blob/master/demo/plugins/plugin1/src/main/java/ro/fortsoft/pf4j/demo/welcome/WelcomePlugin.java)). | |||||
You can retrieve the current runtime mode using `PluginManager.getRuntimeMode()` or in your Plugin implementation with `getWrapper().getRuntimeMode()`(see [WelcomePlugin](https://github.com/decebals/pf4j/blob/master/demo/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java)). | |||||
The DefaultPluginManager determines automatically the correct runtime mode and for DEVELOPMENT mode overrides some components(pluginsDirectory is __"../plugins"__, __PropertiesPluginDescriptorFinder__ as PluginDescriptorFinder, __DevelopmentPluginClasspath__ as PluginClassPath). | The DefaultPluginManager determines automatically the correct runtime mode and for DEVELOPMENT mode overrides some components(pluginsDirectory is __"../plugins"__, __PropertiesPluginDescriptorFinder__ as PluginDescriptorFinder, __DevelopmentPluginClasspath__ as PluginClassPath). | ||||
Another advantage of DEVELOPMENT runtime mode is that you can execute some code lines only in this mode (for example more debug messages). | Another advantage of DEVELOPMENT runtime mode is that you can execute some code lines only in this mode (for example more debug messages). | ||||
------------------- | ------------------- | ||||
Starting with version 0.9 you can define an extension directly in the application jar (you're not obligated | Starting with version 0.9 you can define an extension directly in the application jar (you're not obligated | ||||
to put the extension in a plugin - you can see this extension as a default/system extension). | to put the extension in a plugin - you can see this extension as a default/system extension). | ||||
See [WhazzupGreeting](https://github.com/decebals/pf4j/blob/master/demo/app/src/main/java/ro/fortsoft/pf4j/demo/WhazzupGreeting.java) | |||||
See [WhazzupGreeting](https://github.com/decebals/pf4j/blob/master/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java) | |||||
for a real example. | for a real example. | ||||
This is great for starting application phase. In this scenario you have a minimalist plugin framework with one class loader | This is great for starting application phase. In this scenario you have a minimalist plugin framework with one class loader | ||||
Also you have the possibility to change the `ExtensionStorage` used in `ExtensionAnnotationProcessor`. | Also you have the possibility to change the `ExtensionStorage` used in `ExtensionAnnotationProcessor`. | ||||
By default we use the format with `META-INF/extensions.idx` | By default we use the format with `META-INF/extensions.idx` | ||||
``` | ``` | ||||
ro.fortsoft.pf4j.demo.HowdyGreeting | |||||
ro.fortsoft.pf4j.demo.WhazzupGreeting | |||||
org.pf4j.demo.HowdyGreeting | |||||
org.pf4j.demo.WhazzupGreeting | |||||
``` | ``` | ||||
but you can use a more standard location and format, `META-INF/services/<extension-point>`, used by Java Service Provider | but you can use a more standard location and format, `META-INF/services/<extension-point>`, used by Java Service Provider | ||||
(see `java.util.ServiceLoader`) via `ServiceProviderExtensionStorage` implementation. | (see `java.util.ServiceLoader`) via `ServiceProviderExtensionStorage` implementation. | ||||
In this case the format of `META-INF/services/ro.fortsoft.pf4j.demo.api.Greeting` is | |||||
In this case the format of `META-INF/services/org.pf4j.demo.api.Greeting` is | |||||
``` | ``` | ||||
# Generated by PF4J | # Generated by PF4J | ||||
ro.fortsoft.pf4j.demo.HowdyGreeting | |||||
ro.fortsoft.pf4j.demo.WhazzupGreeting # pf4j extension | |||||
org.pf4j.demo.HowdyGreeting | |||||
org.pf4j.demo.WhazzupGreeting # pf4j extension | |||||
``` | ``` | ||||
where the `ro.fortsoft.pf4j.demo.HowdyGreeting` entry is legacy (it's not generated by PF4J) but it's seen as | |||||
where the `org.pf4j.demo.HowdyGreeting` entry is legacy (it's not generated by PF4J) but it's seen as | |||||
an extension of `Greeting` by PF4J (at runtime). | an extension of `Greeting` by PF4J (at runtime). | ||||
You can plug your custom `ExtensionStorage` implementation in `ExtensionAnnotationProcessor` in two possible modes: | You can plug your custom `ExtensionStorage` implementation in `ExtensionAnnotationProcessor` in two possible modes: | ||||
- set the system property with key `pf4j.storageClassName` | - set the system property with key `pf4j.storageClassName` | ||||
For example if I want to use `ServiceProviderExtensionStorage` then the value for the `pf4j.storageClassName` key must be | For example if I want to use `ServiceProviderExtensionStorage` then the value for the `pf4j.storageClassName` key must be | ||||
`ro.fortsoft.pf4j.processor.ServiceProviderExtensionStorage` | |||||
`org.pf4j.processor.ServiceProviderExtensionStorage` | |||||
**NOTE:** `ServiceLoaderExtensionFinder`, the class that lookups for extensions stored in `META-INF/services` folder, is | **NOTE:** `ServiceLoaderExtensionFinder`, the class that lookups for extensions stored in `META-INF/services` folder, is | ||||
not added/enabled by default. To do this please override `createExtensionFinder` from `DefaultPluginManager`: | not added/enabled by default. To do this please override `createExtensionFinder` from `DefaultPluginManager`: |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-parent</artifactId> | <artifactId>pf4j-demo-parent</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> | ||||
<dependencies> | <dependencies> | ||||
<dependency> | <dependency> | ||||
<groupId>ro.fortsoft.pf4j</groupId> | |||||
<groupId>org.pf4j</groupId> | |||||
<artifactId>pf4j</artifactId> | <artifactId>pf4j</artifactId> | ||||
<version>${project.version}</version> | <version>${project.version}</version> | ||||
<!-- !!! VERY IMPORTANT --> | <!-- !!! VERY IMPORTANT --> |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.api; | |||||
package org.pf4j.demo.api; | |||||
import ro.fortsoft.pf4j.ExtensionPoint; | |||||
import org.pf4j.ExtensionPoint; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-parent</artifactId> | <artifactId>pf4j-demo-parent</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> | ||||
<name>Demo App</name> | <name>Demo App</name> | ||||
<properties> | <properties> | ||||
<main.class>ro.fortsoft.pf4j.demo.Boot</main.class> | |||||
<main.class>org.pf4j.demo.Boot</main.class> | |||||
<slf4j.version>1.7.5</slf4j.version> | <slf4j.version>1.7.5</slf4j.version> | ||||
</properties> | </properties> | ||||
<dependencies> | <dependencies> | ||||
<dependency> | <dependency> | ||||
<groupId>ro.fortsoft.pf4j</groupId> | |||||
<groupId>org.pf4j</groupId> | |||||
<artifactId>pf4j</artifactId> | <artifactId>pf4j</artifactId> | ||||
<version>${project.version}</version> | <version>${project.version}</version> | ||||
</dependency> | </dependency> | ||||
<dependency> | <dependency> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-api</artifactId> | <artifactId>pf4j-demo-api</artifactId> | ||||
<version>${project.version}</version> | <version>${project.version}</version> | ||||
</dependency> | </dependency> |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo; | |||||
package org.pf4j.demo; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Set; | import java.util.Set; | ||||
import org.apache.commons.lang.StringUtils; | import org.apache.commons.lang.StringUtils; | ||||
import ro.fortsoft.pf4j.DefaultPluginManager; | |||||
import ro.fortsoft.pf4j.JarPluginManager; | |||||
import ro.fortsoft.pf4j.PluginManager; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.PluginManager; | |||||
import org.pf4j.PluginWrapper; | |||||
import org.pf4j.demo.api.Greeting; | |||||
import org.pf4j.DefaultPluginManager; | |||||
import org.pf4j.JarPluginManager; | |||||
/** | /** | ||||
* A boot class that start the demo. | * A boot class that start the demo. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo; | |||||
package org.pf4j.demo; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.demo.api.Greeting; | |||||
/** | /** | ||||
* A Service Implementation (no @Extension) declared via Java Service Provider mechanism (using META-INF/services). | * A Service Implementation (no @Extension) declared via Java Service Provider mechanism (using META-INF/services). |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo; | |||||
package org.pf4j.demo; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.demo.api.Greeting; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
org.pf4j.demo.HowdyGreeting |
ro.fortsoft.pf4j.demo.HowdyGreeting |
# | # | ||||
# PF4J log | # PF4J log | ||||
# | # | ||||
log4j.logger.ro.fortsoft.pf4j=DEBUG, Console | |||||
log4j.logger.org.pf4j=DEBUG, Console | |||||
# !!! Put the bellow classes on level TRACE when you are in trouble | # !!! Put the bellow classes on level TRACE when you are in trouble | ||||
log4j.logger.ro.fortsoft.pf4j.PluginClassLoader=DEBUG, Console | |||||
log4j.logger.ro.fortsoft.pf4j.AbstractExtensionFinder=DEBUG, Console | |||||
log4j.additivity.ro.fortsoft.pf4j=false | |||||
log4j.additivity.ro.fortsoft.pf4j.PluginClassLoader=false | |||||
log4j.additivity.ro.fortsoft.pf4j.AbstractExtensionFinder=false | |||||
log4j.logger.org.pf4j.PluginClassLoader=DEBUG, Console | |||||
log4j.logger.org.pf4j.AbstractExtensionFinder=DEBUG, Console | |||||
log4j.additivity.org.pf4j=false | |||||
log4j.additivity.org.pf4j.PluginClassLoader=false | |||||
log4j.additivity.org.pf4j.AbstractExtensionFinder=false | |||||
# | # | ||||
# Appenders | # Appenders |
plugin.id=welcome-plugin | plugin.id=welcome-plugin | ||||
plugin.class=ro.fortsoft.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.class=org.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.version=0.0.1 | plugin.version=0.0.1 | ||||
plugin.provider=Decebal Suiu | plugin.provider=Decebal Suiu | ||||
plugin.dependencies= | plugin.dependencies= |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-plugins</artifactId> | <artifactId>pf4j-demo-plugins</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> | ||||
<properties> | <properties> | ||||
<plugin.id>welcome-plugin</plugin.id> | <plugin.id>welcome-plugin</plugin.id> | ||||
<plugin.class>ro.fortsoft.pf4j.demo.welcome.WelcomePlugin</plugin.class> | |||||
<plugin.class>org.pf4j.demo.welcome.WelcomePlugin</plugin.class> | |||||
<plugin.version>0.0.1</plugin.version> | <plugin.version>0.0.1</plugin.version> | ||||
<plugin.provider>Decebal Suiu</plugin.provider> | <plugin.provider>Decebal Suiu</plugin.provider> | ||||
<plugin.dependencies /> | <plugin.dependencies /> |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.welcome; | |||||
package org.pf4j.demo.welcome; | |||||
import org.apache.commons.lang.StringUtils; | import org.apache.commons.lang.StringUtils; | ||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.Plugin; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.RuntimeMode; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.PluginWrapper; | |||||
import org.pf4j.RuntimeMode; | |||||
import org.pf4j.demo.api.Greeting; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.Plugin; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
plugin.id=hello-plugin | plugin.id=hello-plugin | ||||
plugin.class=ro.fortsoft.pf4j.demo.hello.HelloPlugin | |||||
plugin.class=org.pf4j.demo.hello.HelloPlugin | |||||
plugin.version=0.0.1 | plugin.version=0.0.1 | ||||
plugin.provider=Decebal Suiu | plugin.provider=Decebal Suiu | ||||
plugin.dependencies= | plugin.dependencies= |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-plugins</artifactId> | <artifactId>pf4j-demo-plugins</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> | ||||
<properties> | <properties> | ||||
<plugin.id>hello-plugin</plugin.id> | <plugin.id>hello-plugin</plugin.id> | ||||
<plugin.class>ro.fortsoft.pf4j.demo.hello.HelloPlugin</plugin.class> | |||||
<plugin.class>org.pf4j.demo.hello.HelloPlugin</plugin.class> | |||||
<plugin.version>0.0.1</plugin.version> | <plugin.version>0.0.1</plugin.version> | ||||
<plugin.provider>Decebal Suiu</plugin.provider> | <plugin.provider>Decebal Suiu</plugin.provider> | ||||
<plugin.dependencies /> | <plugin.dependencies /> |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.hello; | |||||
package org.pf4j.demo.hello; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.Plugin; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.Plugin; | |||||
import org.pf4j.PluginWrapper; | |||||
import org.pf4j.demo.api.Greeting; | |||||
/** | /** | ||||
* A very simple plugin. | * A very simple plugin. |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-parent</artifactId> | <artifactId>pf4j-demo-parent</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> | ||||
<dependencies> | <dependencies> | ||||
<dependency> | <dependency> | ||||
<groupId>ro.fortsoft.pf4j</groupId> | |||||
<groupId>org.pf4j</groupId> | |||||
<artifactId>pf4j</artifactId> | <artifactId>pf4j</artifactId> | ||||
<version>${project.version}</version> | <version>${project.version}</version> | ||||
<!-- !!! VERY IMPORTANT --> | <!-- !!! VERY IMPORTANT --> | ||||
</dependency> | </dependency> | ||||
<dependency> | <dependency> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-api</artifactId> | <artifactId>pf4j-demo-api</artifactId> | ||||
<version>${project.version}</version> | <version>${project.version}</version> | ||||
<!-- !!! VERY IMPORTANT --> | <!-- !!! VERY IMPORTANT --> |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j</groupId> | |||||
<groupId>org.pf4j</groupId> | |||||
<artifactId>pf4j-parent</artifactId> | <artifactId>pf4j-parent</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>ro.fortsoft.pf4j.demo</groupId> | |||||
<groupId>org.pf4j.demo</groupId> | |||||
<artifactId>pf4j-demo-parent</artifactId> | <artifactId>pf4j-demo-parent</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
<packaging>pom</packaging> | <packaging>pom</packaging> |
dependencies { | dependencies { | ||||
compile 'ro.fortsoft.pf4j:pf4j:1.3.0' | |||||
compile 'org.apache.commons:commons-lang3:3.0' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
compile 'org.pf4j:pf4j:1.4.0-SNAPSHOT' | |||||
compile 'org.apache.commons:commons-lang3:3.0' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} | } |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.api; | |||||
package org.pf4j.demo.api; | |||||
import ro.fortsoft.pf4j.ExtensionPoint; | |||||
import org.pf4j.ExtensionPoint; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu | ||||
*/ | */ | ||||
public interface Greeting extends ExtensionPoint { | public interface Greeting extends ExtensionPoint { | ||||
public String getGreeting(); | |||||
String getGreeting(); | |||||
} | } |
apply plugin:'application' | |||||
apply plugin: 'application' | |||||
mainClassName = 'ro.fortsoft.pf4j.demo.Boot' | |||||
mainClassName = 'org.pf4j.demo.Boot' | |||||
dependencies { | dependencies { | ||||
compile project(':api') | |||||
compile 'ro.fortsoft.pf4j:pf4j:1.3.0' | |||||
compile 'org.apache.commons:commons-lang3:3.5' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' | |||||
compile project(':api') | |||||
compile 'org.pf4j:pf4j:1.4.0-SNAPSHOT' | |||||
compile 'org.apache.commons:commons-lang3:3.5' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' | |||||
} | } | ||||
jar { | jar { | ||||
baseName = 'Plugin Demo' | |||||
version = '0.1.0' | |||||
baseName = 'Plugin Demo' | |||||
version = '0.1.0' | |||||
} | } |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo; | |||||
package org.pf4j.demo; | |||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.DefaultPluginManager; | |||||
import ro.fortsoft.pf4j.PluginManager; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.DefaultPluginManager; | |||||
import org.pf4j.PluginManager; | |||||
import org.pf4j.PluginWrapper; | |||||
import org.pf4j.demo.api.Greeting; | |||||
import java.util.List; | import java.util.List; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo; | |||||
package org.pf4j.demo; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.demo.api.Greeting; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
# | # | ||||
# PF4J log | # PF4J log | ||||
# | # | ||||
log4j.logger.ro.fortsoft.pf4j=DEBUG, Console | |||||
log4j.logger.ro.fortsoft.pf4j.PluginClassLoader=WARN, Console | |||||
log4j.additivity.ro.fortsoft.pf4j=false | |||||
log4j.logger.org.pf4j=DEBUG, Console | |||||
log4j.logger.org.pf4j.PluginClassLoader=WARN, Console | |||||
log4j.additivity.org.pf4j=false | |||||
# | # | ||||
# Appenders | # Appenders |
subprojects { | subprojects { | ||||
apply plugin: 'java' | |||||
apply plugin: 'java' | |||||
repositories { | |||||
mavenLocal() | |||||
mavenCentral() | |||||
} | |||||
repositories { | |||||
mavenLocal() | |||||
mavenCentral() | |||||
} | |||||
} | } | ||||
task copyPlugins() { | task copyPlugins() { | ||||
subprojects.each { p -> | subprojects.each { p -> | ||||
if (p.path.contains(":plugins/")) { | if (p.path.contains(":plugins/")) { | ||||
System.out.println("Copying plugin from " + p.path); | |||||
System.out.println("Copying plugin from " + p.path); | |||||
copy { | copy { | ||||
from p.projectDir.toString() + '/build/libs' | from p.projectDir.toString() + '/build/libs' | ||||
into 'app/plugins' | into 'app/plugins' |
baseName = 'WelcomePlugin' | baseName = 'WelcomePlugin' | ||||
version = '0.1.0' | version = '0.1.0' | ||||
manifest { | manifest { | ||||
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.welcome.WelcomePlugin', | |||||
'Plugin-Id' : 'WelcomePlugin', | |||||
'Plugin-Version' : '1.0.0', | |||||
'Plugin-Provider' : 'Decebal Suiu' | |||||
attributes 'Plugin-Class': 'org.pf4j.demo.welcome.WelcomePlugin', | |||||
'Plugin-Id': 'WelcomePlugin', | |||||
'Plugin-Version': '1.0.0', | |||||
'Plugin-Provider': 'Decebal Suiu' | |||||
} | } | ||||
} | } | ||||
task plugin(type: Jar) { | task plugin(type: Jar) { | ||||
baseName = 'WelcomePlugin' | |||||
version = '0.1.0' | |||||
into('classes'){ | |||||
with jar | |||||
} | |||||
into('lib'){ | |||||
from configurations.compile | |||||
} | |||||
extension('zip') | |||||
baseName = 'WelcomePlugin' | |||||
version = '0.1.0' | |||||
into('classes') { | |||||
with jar | |||||
} | |||||
into('lib') { | |||||
from configurations.compile | |||||
} | |||||
extension('zip') | |||||
} | } | ||||
assemble.dependsOn plugin | assemble.dependsOn plugin | ||||
dependencies { | dependencies { | ||||
compileOnly project(':api') // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already! | |||||
compile ('ro.fortsoft.pf4j:pf4j:1.3.0') { | |||||
exclude group: "org.slf4j" | |||||
} | |||||
compile 'org.apache.commons:commons-lang3:3.5' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
compileOnly project(':api') | |||||
// compileOnly important!!! We do not want to put the api into the zip file since the main program has it already! | |||||
compile('org.pf4j:pf4j:1.4.0-SNAPSHOT') { | |||||
exclude group: "org.slf4j" | |||||
} | |||||
compile 'org.apache.commons:commons-lang3:3.5' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} | } |
plugin.id=welcome-plugin | plugin.id=welcome-plugin | ||||
plugin.class=ro.fortsoft.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.class=org.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.version=0.0.1 | plugin.version=0.0.1 | ||||
plugin.provider=Decebal Suiu | plugin.provider=Decebal Suiu | ||||
plugin.dependencies= | plugin.dependencies= |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.welcome; | |||||
package org.pf4j.demo.welcome; | |||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.Plugin; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.Plugin; | |||||
import org.pf4j.PluginWrapper; | |||||
import org.pf4j.demo.api.Greeting; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
jar { | jar { | ||||
baseName = 'HelloPlugin' | |||||
version = '0.1.0' | |||||
manifest { | |||||
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.hello.HelloPlugin', | |||||
'Plugin-Id' : 'HelloPlugin', | |||||
'Plugin-Version' : '1.0.0', | |||||
'Plugin-Provider' : 'Decebal Suiu' | |||||
} | |||||
baseName = 'HelloPlugin' | |||||
version = '0.1.0' | |||||
manifest { | |||||
attributes 'Plugin-Class': 'org.pf4j.demo.hello.HelloPlugin', | |||||
'Plugin-Id': 'HelloPlugin', | |||||
'Plugin-Version': '1.0.0', | |||||
'Plugin-Provider': 'Decebal Suiu' | |||||
} | |||||
} | } | ||||
task plugin(type: Jar) { | task plugin(type: Jar) { | ||||
baseName = 'HelloPlugin' | |||||
version = '0.1.0' | |||||
into('classes'){ | |||||
with jar | |||||
} | |||||
into('lib'){ | |||||
from configurations.compile | |||||
} | |||||
extension('zip') | |||||
baseName = 'HelloPlugin' | |||||
version = '0.1.0' | |||||
into('classes') { | |||||
with jar | |||||
} | |||||
into('lib') { | |||||
from configurations.compile | |||||
} | |||||
extension('zip') | |||||
} | } | ||||
assemble.dependsOn plugin | assemble.dependsOn plugin | ||||
dependencies { | dependencies { | ||||
compileOnly project(':api') // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already! | |||||
compile ('ro.fortsoft.pf4j:pf4j:1.3.0') { | |||||
exclude group: "org.slf4j" | |||||
} | |||||
compile 'org.apache.commons:commons-lang3:3.5' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
compileOnly project(':api') | |||||
// compileOnly important!!! We do not want to put the api into the zip file since the main program has it already! | |||||
compile('org.pf4j:pf4j:1.4.0-SNAPSHOT') { | |||||
exclude group: "org.slf4j" | |||||
} | |||||
compile 'org.apache.commons:commons-lang3:3.5' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} | } |
plugin.id=hello-plugin | plugin.id=hello-plugin | ||||
plugin.class=ro.fortsoft.pf4j.demo.hello.HelloPlugin | |||||
plugin.class=org.pf4j.demo.hello.HelloPlugin | |||||
plugin.version=0.0.1 | plugin.version=0.0.1 | ||||
plugin.provider=Decebal Suiu | plugin.provider=Decebal Suiu | ||||
plugin.dependencies= | plugin.dependencies= |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.hello; | |||||
package org.pf4j.demo.hello; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.Plugin; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.Plugin; | |||||
import org.pf4j.PluginWrapper; | |||||
import org.pf4j.demo.api.Greeting; | |||||
/** | /** | ||||
* A very simple plugin. | * A very simple plugin. |
baseName = 'KotlinPlugin' | baseName = 'KotlinPlugin' | ||||
version = '0.1.0' | version = '0.1.0' | ||||
manifest { | manifest { | ||||
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.kotlin.KotlinPlugin', | |||||
'Plugin-Id' : 'KotlinPlugin', | |||||
'Plugin-Version' : '1.0.0', | |||||
'Plugin-Provider' : 'Anindya Chatterjee' | |||||
attributes 'Plugin-Class': 'org.pf4j.demo.kotlin.KotlinPlugin', | |||||
'Plugin-Id': 'KotlinPlugin', | |||||
'Plugin-Version': '1.0.0', | |||||
'Plugin-Provider': 'Anindya Chatterjee' | |||||
} | } | ||||
} | } | ||||
task plugin(type: Jar) { | task plugin(type: Jar) { | ||||
baseName = 'KotlinPlugin' | baseName = 'KotlinPlugin' | ||||
version = '0.1.0' | version = '0.1.0' | ||||
into('classes'){ | |||||
into('classes') { | |||||
with jar | with jar | ||||
} | } | ||||
into('lib'){ | |||||
into('lib') { | |||||
from configurations.compile | from configurations.compile | ||||
} | } | ||||
extension('zip') | extension('zip') | ||||
dependencies { | dependencies { | ||||
compileOnly project(':api') | compileOnly project(':api') | ||||
kapt ('ro.fortsoft.pf4j:pf4j:1.3.0') { | |||||
kapt('org.pf4j:pf4j:1.4.0-SNAPSHOT') { | |||||
exclude group: "org.slf4j" | exclude group: "org.slf4j" | ||||
} | } | ||||
compile 'org.apache.commons:commons-lang3:3.5' | compile 'org.apache.commons:commons-lang3:3.5' |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.demo.kotlin | |||||
package org.pf4j.demo.kotlin | |||||
import org.apache.commons.lang3.StringUtils | import org.apache.commons.lang3.StringUtils | ||||
import org.slf4j.LoggerFactory | import org.slf4j.LoggerFactory | ||||
import ro.fortsoft.pf4j.Extension | |||||
import ro.fortsoft.pf4j.Plugin | |||||
import ro.fortsoft.pf4j.PluginWrapper | |||||
import ro.fortsoft.pf4j.demo.api.Greeting | |||||
import org.pf4j.Extension | |||||
import org.pf4j.Plugin | |||||
import org.pf4j.PluginWrapper | |||||
import org.pf4j.demo.api.Greeting | |||||
/** | /** | ||||
* A sample plugin written in Kotlin | * A sample plugin written in Kotlin |
include 'plugins/plugin1' | include 'plugins/plugin1' | ||||
include 'plugins/plugin2' | include 'plugins/plugin2' | ||||
include 'plugins/plugin3' | include 'plugins/plugin3' | ||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
<parent> | <parent> | ||||
<groupId>ro.fortsoft.pf4j</groupId> | |||||
<groupId>org.pf4j</groupId> | |||||
<artifactId>pf4j-parent</artifactId> | <artifactId>pf4j-parent</artifactId> | ||||
<version>1.4.0-SNAPSHOT</version> | <version>1.4.0-SNAPSHOT</version> | ||||
</parent> | </parent> |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.pf4j.util.ClassUtils; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.ClassUtils; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Collections; | import java.util.Collections; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.StringUtils; | |||||
import org.pf4j.util.StringUtils; | |||||
import java.io.Closeable; | import java.io.Closeable; | ||||
import java.io.IOException; | import java.io.IOException; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import ro.fortsoft.pf4j.util.FileUtils; | |||||
import org.pf4j.util.FileUtils; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
import java.util.ArrayList; | import java.util.ArrayList; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashSet; | import java.util.HashSet; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* The default values are {@code classes} and {@code lib}. | * The default values are {@code classes} and {@code lib}. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import ro.fortsoft.pf4j.util.FileUtils; | |||||
import org.pf4j.util.FileUtils; | |||||
import java.io.File; | import java.io.File; | ||||
import java.nio.file.Path; | import java.nio.file.Path; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.pf4j.util.FileUtils; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.FileUtils; | |||||
import java.io.File; | import java.io.File; | ||||
import java.nio.file.Path; | import java.nio.file.Path; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.pf4j.util.AndFileFilter; | |||||
import org.pf4j.util.DirectoryFileFilter; | |||||
import org.pf4j.util.FileUtils; | |||||
import org.pf4j.util.HiddenFilter; | |||||
import org.pf4j.util.NotFileFilter; | |||||
import org.pf4j.util.OrFileFilter; | |||||
import org.pf4j.util.ZipFileFilter; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.AndFileFilter; | |||||
import ro.fortsoft.pf4j.util.DirectoryFileFilter; | |||||
import ro.fortsoft.pf4j.util.FileUtils; | |||||
import ro.fortsoft.pf4j.util.HiddenFilter; | |||||
import ro.fortsoft.pf4j.util.NameFileFilter; | |||||
import ro.fortsoft.pf4j.util.NotFileFilter; | |||||
import ro.fortsoft.pf4j.util.OrFileFilter; | |||||
import ro.fortsoft.pf4j.util.ZipFileFilter; | |||||
import org.pf4j.util.NameFileFilter; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.pf4j.util.FileUtils; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.FileUtils; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.nio.file.Path; | import java.nio.file.Path; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import com.github.zafarkhaja.semver.Version; | import com.github.zafarkhaja.semver.Version; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.DirectedGraph; | |||||
import org.pf4j.util.DirectedGraph; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Collections; | import java.util.Collections; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* Overwrite classes directories to {@code target/classes} and lib directories to {@code target/lib}. | * Overwrite classes directories to {@code target/classes} and lib directories to {@code target/lib}. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import static java.lang.annotation.ElementType.TYPE; | import static java.lang.annotation.ElementType.TYPE; | ||||
import static java.lang.annotation.RetentionPolicy.RUNTIME; | import static java.lang.annotation.RetentionPolicy.RUNTIME; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* Creates an extension instance. | * Creates an extension instance. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Set; | import java.util.Set; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* A wrapper over extension instance. | * A wrapper over extension instance. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
import ro.fortsoft.pf4j.util.AndFileFilter; | |||||
import ro.fortsoft.pf4j.util.DirectoryFileFilter; | |||||
import ro.fortsoft.pf4j.util.HiddenFilter; | |||||
import ro.fortsoft.pf4j.util.JarFileFilter; | |||||
import ro.fortsoft.pf4j.util.NameFileFilter; | |||||
import ro.fortsoft.pf4j.util.NotFileFilter; | |||||
import ro.fortsoft.pf4j.util.OrFileFilter; | |||||
package org.pf4j; | |||||
import org.pf4j.util.AndFileFilter; | |||||
import org.pf4j.util.DirectoryFileFilter; | |||||
import org.pf4j.util.HiddenFilter; | |||||
import org.pf4j.util.JarFileFilter; | |||||
import org.pf4j.util.NotFileFilter; | |||||
import org.pf4j.util.OrFileFilter; | |||||
import org.pf4j.util.NameFileFilter; | |||||
import java.io.FileFilter; | import java.io.FileFilter; | ||||
import java.io.IOException; | import java.io.IOException; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.processor.LegacyExtensionStorage; | |||||
import org.pf4j.processor.LegacyExtensionStorage; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStreamReader; | import java.io.InputStreamReader; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import ro.fortsoft.pf4j.util.StringUtils; | |||||
import org.pf4j.util.StringUtils; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
import java.util.jar.Attributes; | import java.util.jar.Attributes; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
private static final Logger log = LoggerFactory.getLogger(PluginClassLoader.class); | private static final Logger log = LoggerFactory.getLogger(PluginClassLoader.class); | ||||
private static final String PLUGIN_PACKAGE_PREFIX = "ro.fortsoft.pf4j."; | |||||
private static final String PLUGIN_PACKAGE_PREFIX = "org.pf4j."; | |||||
private PluginManager pluginManager; | private PluginManager pluginManager; | ||||
private PluginDescriptor pluginDescriptor; | private PluginDescriptor pluginDescriptor; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Arrays; | import java.util.Arrays; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Collections; | import java.util.Collections; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import ro.fortsoft.pf4j.util.StringUtils; | |||||
import org.pf4j.util.StringUtils; | |||||
/** | /** | ||||
* An exception used to indicate that a plugin problem occurred. | * An exception used to indicate that a plugin problem occurred. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* Creates a plugin instance. | * Creates a plugin instance. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
import java.util.List; | import java.util.List; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
import java.util.List; | import java.util.List; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.EventObject; | import java.util.EventObject; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.EventListener; | import java.util.EventListener; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.nio.file.Path; | import java.nio.file.Path; | ||||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.util.StringUtils; | |||||
import org.pf4j.util.StringUtils; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStream; | import java.io.InputStream; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.Map; | import java.util.Map; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
import org.pf4j.processor.ServiceProviderExtensionStorage; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import ro.fortsoft.pf4j.processor.ServiceProviderExtensionStorage; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.Reader; | import java.io.Reader; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j; | |||||
package org.pf4j; | |||||
/** | /** | ||||
* Manager responsible for versions of plugins. | * Manager responsible for versions of plugins. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.processor; | |||||
package org.pf4j.processor; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.ExtensionPoint; | |||||
import org.pf4j.Extension; | |||||
import org.pf4j.ExtensionPoint; | |||||
import javax.annotation.processing.AbstractProcessor; | import javax.annotation.processing.AbstractProcessor; | ||||
import javax.annotation.processing.ProcessingEnvironment; | import javax.annotation.processing.ProcessingEnvironment; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.processor; | |||||
package org.pf4j.processor; | |||||
import javax.annotation.processing.Filer; | import javax.annotation.processing.Filer; | ||||
import javax.lang.model.element.Element; | import javax.lang.model.element.Element; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.processor; | |||||
package org.pf4j.processor; | |||||
import javax.annotation.processing.FilerException; | import javax.annotation.processing.FilerException; | ||||
import javax.tools.FileObject; | import javax.tools.FileObject; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.processor; | |||||
package org.pf4j.processor; | |||||
import javax.annotation.processing.FilerException; | import javax.annotation.processing.FilerException; | ||||
import javax.tools.FileObject; | import javax.tools.FileObject; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Arrays; | import java.util.Arrays; | ||||
import java.util.Collections; | import java.util.Collections; | ||||
import java.util.Iterator; | |||||
import java.util.List; | import java.util.List; | ||||
/** | /** |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.lang.reflect.Modifier; | import java.lang.reflect.Modifier; | ||||
import java.util.ArrayList; | import java.util.ArrayList; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Collections; | import java.util.Collections; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
/** | /** | ||||
* File filter that accepts all files ending with .JAR. | * File filter that accepts all files ending with .JAR. |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileFilter; | import java.io.FileFilter; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
/** | /** | ||||
* @author Decebal Suiu | * @author Decebal Suiu |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileInputStream; | import java.io.FileInputStream; |
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
package ro.fortsoft.pf4j.util; | |||||
package org.pf4j.util; | |||||
/** | /** | ||||
* File filter that accepts all files ending with .ZIP. | * File filter that accepts all files ending with .ZIP. |