You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 8 година
пре 1 година
пре 1 година
пре 1 година
пре 1 година
пре 3 година
пре 1 година
пре 3 година
пре 1 година
пре 3 година
пре 1 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 4 година
пре 3 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 5 година
пре 6 година
пре 5 година
пре 6 година
пре 5 година
пре 6 година
пре 5 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 7 година
пре 6 година
пре 7 година
пре 6 година
пре 7 година
пре 6 година
пре 7 година
пре 6 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 5 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 8 година
пре 7 година
пре 8 година
пре 7 година
пре 7 година
пре 7 година
пре 8 година
пре 7 година
пре 8 година
пре 7 година
пре 8 година
пре 8 година
пре 8 година
пре 7 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 1 година
пре 1 година
пре 1 година
пре 3 година
пре 3 година
пре 3 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 5 година
пре 5 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 8 година
пре 1 година
пре 1 година
пре 1 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 3 година
пре 4 година
пре 4 година
пре 4 година
пре 4 година
пре 5 година
пре 5 година
пре 5 година
пре 6 година
пре 5 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 6 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 7 година
пре 8 година
пре 8 година
пре 8 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. ## Change Log
  2. All notable changes to this project will be documented in this file.
  3. This project adheres to [Semantic Versioning](http://semver.org/).
  4. ### [Unreleased][unreleased]
  5. #### Fixed
  6. #### Changed
  7. #### Added
  8. #### Removed
  9. ### [3.9.0] - 2023-01-30
  10. #### Changed
  11. - [#512]: Relax Plugin construction (remove dependency on PluginWrapper)
  12. ### [3.8.0] - 2022-10-27
  13. #### Fixed
  14. - [#492]: Loading extensions crashes kotlin application
  15. - [#508]: Not create extensions.idx if no extensions exist
  16. #### Changed
  17. - Make ServiceProviderExtensionFinder optional in demo (commented code)
  18. #### Added
  19. - Add support for reading plugin descriptor from zip
  20. - Use logger instead of System.out.println for demo
  21. #### Removed
  22. ### [3.7.0] - 2022-06-28
  23. #### Fixed
  24. - [#435]: Fix the path separator used in the SingletonExtensionFactoryTest.java
  25. - [#451]: Fix Dependency version check fails even if required is '*'
  26. - [#490]: Fix memory leak in SingletonExtensionFactory
  27. #### Changed
  28. - Update mockito version from 2.24.0 to 3.8.0
  29. - [#426]: Update module-info.java
  30. - [#455]: Do not rely on version from Manifest
  31. - Update Log4j version to 2.17.1
  32. #### Added
  33. - [#430]: Add a unit test in AbstractExtensionFinderTest to reproduce #428
  34. - [#450]: Add wrapper to plugin manager (SecurePluginManagerWrapper)
  35. - Add code analyses via Sonar
  36. - Add support for reading plugin descriptor from zip
  37. #### Removed
  38. ### [3.6.0] - 2021-01-16
  39. #### Fixed
  40. - [#394]: `DependencyResolver` lost dependent info after plugin stop
  41. #### Changed
  42. #### Added
  43. - [#415]: Externalize some useful classes from testing
  44. #### Removed
  45. ### [3.5.0] - 2020-11-08
  46. #### Fixed
  47. - [#378]: Wrong log message
  48. - [#396]: `WrongDependencyVersionException` logs do not contain any info
  49. #### Changed
  50. - [#395]: Make ClassLoadingStrategy's constructor public
  51. - [#398]: Make `DefaultPluginDescriptor#addDependency` usable
  52. - [#402]: Bucketed caching in `SingletonExtensionFactory`
  53. #### Added
  54. - [#400]: Add support for JPMS (`module-info.java`)
  55. - [#404]: Support multiple plugin root directories
  56. #### Removed
  57. ### [3.4.1] - 2020-08-14
  58. #### Fixed
  59. - [#371]: `ClosedFileSystemException` when I run demo (Windows)
  60. - [#391]: Incorrect enum selection in `ClassLoadingStrategy.ADP`
  61. #### Changed
  62. #### Added
  63. #### Removed
  64. ### [3.3.0] - 2020-04-21
  65. #### Fixed
  66. - [#355]: Cannot remove plugin jar file after unloading
  67. - [#359]: Calls to `File.mkdirs` in unzip logic may silently fail
  68. - [#363]: StackOverflow in `AbstractExtensionFinder.findExtensionAnnotation`
  69. - [#366]: Check proper list for debug logging
  70. #### Changed
  71. - [#364]: Failed plugin state added. When plugin failed to start previous state was kept
  72. - [#370]: Improve annotation processor error messages
  73. #### Added
  74. - [#352]: Add `equals`/`hashCode` to some data classes
  75. - [#365]: `PluginClassLoader` does not resolve classpath resources from plugin dependencies
  76. #### Removed
  77. ### [3.2.0] - 2019-11-29
  78. #### Fixed
  79. - Fix flaky test `DefaultPluginRepositoryTest.testGetPluginArchive`
  80. - [#349]: Fix Gradle demo
  81. #### Changed
  82. - Add more defense in `ExtensionAnnotationProcessor` (error message if something is wrong)
  83. - Add more tests in `ExtensionAnnotationProcessorTest`
  84. #### Added
  85. - [#348]: Found extensions when using decorated annotations
  86. - [#350]: Support any interface as an `ExtensionPoint`
  87. #### Removed
  88. ### [3.1.0] - 2019-09-08
  89. #### Fixed
  90. - [#335]: `DefaultPluginStatusProvider.enablePlugin` function seems to be wrong
  91. #### Changed
  92. - [#328]: Modified `PluginState` to an enum
  93. - [#330]: Make `AbstractPluginManager` fields protected
  94. #### Added
  95. - [#323]: Add IDEA classpath for Development mode
  96. - [#337]: Implement `PluginClassLoader.getResources`
  97. #### Removed
  98. ### [3.0.0] - 2019-06-12
  99. #### Fixed
  100. - [#297]: Loading extensions may shutdown the application
  101. - Fix the plugin directory will be deleted anyway in unzip `extract` method
  102. - [#309]: Can't delete/remove unloaded plugin
  103. - [#311]: Wrong file delete on `JarPluginRepository.deletePluginPath`
  104. - [#322]: Fix `FileSystemException` in Windows on plugin delete
  105. #### Changed
  106. - Improve `run-demo` scripts
  107. - [#294]: Configure compound classes to use JAR plugins first
  108. - [#296]: Return extension classes with wildcard type arguments
  109. - [#298]: update ASM library to version 7.1
  110. - Migrate to JUnit 5
  111. - Improve `PluginZip` (used in tests)
  112. - Improve readability of `PropertiesPluginDescriptorFinderTest`
  113. - Convert `PluginException` in `PluginRuntimeException` and use unchecked exceptions in PF4J
  114. #### Added
  115. - [#278]: Make the project build on Java 11
  116. - [#287]: Check no plugin with same `pluginId` is loaded
  117. - [#288]: Document thread safety of `PluginManager`s
  118. - [#292]: Communicate errors with Exceptions where appropriate
  119. - [#306]: Provide an Archetype for new PF4J based projects
  120. - [#307]: Add `JarPluginManager` and `ZipPluginManager`
  121. - Add constants for manifest's attributes names
  122. - Add constants for properties names
  123. - Add `PluginJar` (used in tests)
  124. - Add `AbstractPluginManagerTest`
  125. - Add `DirectedGraphTest`
  126. - Add `JarPluginManagerTest`
  127. - Extract constants for some system property names
  128. #### Removed
  129. - Remove deprecated constructor in `DefaultPluginManager`
  130. ### [2.6.0] - 2019-02-01
  131. #### Fixed
  132. - [#273]: `ServiceProviderExtensionFinder` should scan the whole classpath
  133. - [#276]: The plugins in the demo did not load successfully
  134. - [#277]: Configures plugin manager to load "HowdyGreeting" using the services
  135. #### Changed
  136. - Improve run demo scripts
  137. - [#248]: Load extensions from plugin libraries
  138. - [#271]: Update `slf4j` dependency to version 1.7.25
  139. #### Added
  140. - [#265]: Explicitly configure extension points for an extension
  141. - [#270]: Optional plugin dependencies
  142. - [#275]: Add automatic module name to `pf4j.jar`
  143. #### Removed
  144. ### [2.5.0] - 2018-12-12
  145. #### Fixed
  146. - [#248]: Plugin upgrade version order not guaranteed
  147. - [#250]: Method `DependencyResolver.resolve` removes dependents in check version block
  148. - [#252]: `java.nio.file.FileSystemNotFoundException`
  149. #### Changed
  150. - [#209]: Why "plugin.properties" is required?
  151. #### Added
  152. - [#242]: Add delete hook method in `Plugin`
  153. - [#256]: Adds ability to configure plugin directory
  154. #### Removed
  155. ### [2.4.0] - 2018-08-01
  156. #### Fixed
  157. - [#222]: Correct the class passed to `DefaultPluginFactory's` logger
  158. - [#223]: A disabled plugin is automatically started by `pluginManager.startPlugins()`
  159. - [#229]: Can't find `plugin.properties` file inside `.jar`
  160. - Fix error in `FileUtils.getFileSystem`
  161. #### Changed
  162. #### Added
  163. - [#229]: Add `SingletonExtensionFactory`
  164. - [#229]: Allow a way to query all extension classes for a given plugin
  165. #### Removed
  166. ### [2.3.0] - 2018-06-04
  167. #### Fixed
  168. - [#202]: Spaces in name produce 'Illegal character in opaque part at index'
  169. - [#203]: File lock on plugin jar not released
  170. #### Changed
  171. - [#171]: Change the copyright text from the head of files
  172. - [#218]: It should not return null after it detects that the plugin has been loaded
  173. - [#219]: Improve support for Gradle and Kotlin
  174. #### Added
  175. - [#199]: Make optional the plugin class attribute of plugin manifest
  176. - [#206]: Support multiple plugin directories
  177. - Add aliases to the runtime modes (`dev` for `development` and `prod` for `deployment`)
  178. #### Removed
  179. ### [2.2.0] - 2018-02-11
  180. #### Fixed
  181. - [#197]: Close `JarFile` stream after `getManifest` in `ManifestPluginDescriptorFinder.find(Path pluginPath)`
  182. - Before start a plugin check if the plugin is resolved
  183. - [#200]: Compiling with Maven under Java9 breaks project
  184. #### Changed
  185. - [#194]: Changing packaging from ZIP to JAR for demo
  186. - Improve `VersionManager` (prepare a new `pf4j-update` release)
  187. #### Added
  188. - [#166]: Simplify main `README` (move the content to http://www.pf4j.org)
  189. - [#190]: Add methods to just get extension classes
  190. - Add `LoggingPluginStateListener` as listener in `DefaultPluginManager` (only for `development` mode)
  191. - Add new `RESOLVED` as plugin state
  192. - Add support for PARENT FIRST loading strategy
  193. #### Removed
  194. ### [2.1.0] - 2018-01-10
  195. #### Fixed
  196. - [#177]: Fix Gradle demo
  197. - [#178]: `@Override` should not change method signature
  198. - [#184]: Bug in FileUtils while creating URI on Windows
  199. #### Changed
  200. - [#180]: Refactoring to make `PluginDescriptor` more usable
  201. #### Added
  202. #### Removed
  203. ### [2.0.0] - 2017-10-17
  204. #### Fixed
  205. - [#156]: `FileSystemException` when I call `deletePlugin` after `getExtensions`
  206. - Fix Maven warnings
  207. #### Changed
  208. - [#149]: Updated gradle demo dependencies and switched from System.out.println to slf4j log
  209. - Update some code to Java 7
  210. - [#168]: Change root package from `ro.fortsoft.pf4j` to `org.pf4j`
  211. - Open a new extension (protected method) point in `PropertiesPluginDescriptorFinder`
  212. #### Added
  213. - [#146]: Kotlin plugin example added and README updated for Kotlin
  214. - [#150]: Enforce dependencies versions
  215. - [#155]: Add VersionManager abstractization (breaking change)
  216. - [#172]: Add `CompoundPluginDescriptorFinder`
  217. - Add `CompoundPluginLoader`
  218. #### Removed
  219. - Remove `JarPluginManager` (the logic is included in `DefaultPluginManager` via `CompoundXYZ` concept)
  220. ### [1.3.0] - 2017-05-03
  221. #### Fixed
  222. - [#129]: Properties Descriptor finder bug fixes and a test
  223. - [#131]: Fix bug in `loadJars()`, did not add `/lib` to classloader
  224. - [#134]: `getVersion()` use wrong class for calculating PF4J version
  225. - [#135]: `deletePlugin()` failed to delete plugin folder with contents
  226. - [#137]: The requires Expression does not print well
  227. - [#140]: Unzip plugin zip file in `loadPluginFromPath()`
  228. #### Changed
  229. - [#130]: Refactor validation of PluginDescriptors
  230. - [#138]: Refactor of requires in PluginDescriptor (breaking change)
  231. #### Added
  232. - [#133]: Support for adding license information to the plugins
  233. - [#136]: Delete plugin zip on uninstall
  234. - [#139]: Ability to get `pluginsRoot` from PluginManager
  235. - Add constructors with varargs in PluginException
  236. #### Removed
  237. ### [1.2.0] - 2017-03-03
  238. #### Fixed
  239. - [#125]: Fix possible NPE
  240. #### Changed
  241. - [#116]: Updated PF4J to newest version in Gradle demo
  242. - Reactivate protection against the issues similar with [#97]
  243. #### Added
  244. - [#128]: Add `JarPluginManager`, `PluginLoader`, `AbstractPluginManager`
  245. #### Removed
  246. ### [1.1.1] - 2016-11-17
  247. #### Fixed
  248. - [#116]: Default/System extensions are duplicated
  249. #### Changed
  250. #### Added
  251. - [#111]: Add inheritance support on Extension annotation
  252. #### Removed
  253. ### [1.1.0] - 2016-08-22
  254. #### Fixed
  255. #### Changed
  256. - [#107]: PluginDescriptor can't be extended
  257. #### Added
  258. - [#108]: Return a list of all extensions from a plugin and optional for an extension point
  259. #### Removed
  260. ### [1.0.0] - 2016-07-07
  261. #### Fixed
  262. - [#99]: NPE in `DefaultPluginManager.stopPlugin()`
  263. - [#100]: Gradle build in demo_gradle is broken
  264. - [#103]: Gradle demos don't build zip with libs
  265. - Fix logging issue in demo
  266. #### Changed
  267. - Rework defense against [#97]
  268. - Eliminate duplicate log messages from demo
  269. - Improve debugging for "no extensions found"
  270. #### Added
  271. #### Removed
  272. ### [0.13.1] - 2016-04-01
  273. #### Fixed
  274. - [#98]: WARN ro.fortsoft.pf4j.AbstractExtensionFinder (too many log lines)
  275. ### [0.13.0] - 2016-03-28
  276. #### Fixed
  277. - Fix issue with listing files from the jar file in `readPluginsStorages()`
  278. - [#89]: Fix "URI is not hierarchical" issue
  279. - [#91]: Using project lombok with pf4j causes javax.annotation.processing.FilerException
  280. #### Changed
  281. - Log with trace level on PluginClassLoader
  282. #### Added
  283. - Add `distributionManagement` section in `pom.xml`
  284. - Add defense to [#97]
  285. - Add helper `DefaultExtensionFinder.addServiceProviderExtensionFinder()`
  286. #### Removed
  287. - Disable `ServiceProviderExtensionFinder` from `DefaultExtensionFinder`
  288. ### [0.12.0] - 2016-01-29
  289. #### Fixed
  290. - [#83]: `stopPlugin()` throws NPE for dependents check
  291. - In development mode hide `plugins/target` folder (it' is not a plugin)
  292. #### Changed
  293. - Add constructor with vararg and make `addFileFilter()` fluent in `AndFileFilter`
  294. - [#84]: remove warn from `DefaultPluginManager.whichPlugin()`
  295. - Pull method `DefaultPluginManager.whichPlugin()` to PluginManager
  296. - Add `getExtensionFactory()` in PluginManager interface
  297. #### Added
  298. - Add constructor with vararg and make addFileFilter method fluent in `AndFileFilter`
  299. - Add `NameFileFilter` and `OrFileFilter`
  300. - [#85]: ExtensionStorage based on Java Service Provider (META-INf/services)
  301. #### Removed
  302. ### [0.11.0] - 2015-11-19
  303. #### Fixed
  304. - [#78]: `PluginManager.disablePlugin()` throws UnsupportedOperationExeption
  305. #### Changed
  306. - Make more fields protected in DefaultPluginManager
  307. - [#70]: Improve PluginDescriptorFinder implementations
  308. - Make PluginManager available in Plugin via PluginWrapper
  309. #### Added
  310. - [#66]: Add possibility to overwrite DefaultPluginManager (to create a JarPluginManager)
  311. - Added one more fail test to DefaultPluginFactory
  312. - Added one more fail test to DefaultExtensionFactory
  313. - Added ManifestPluginDescriptorFinder tests
  314. #### Removed
  315. ### [0.10.0] - 2015-08-11
  316. #### Fixed
  317. - [#39]: Fix build on JDK 1.8
  318. - [42]: Stop Plugin issue
  319. - [60]: Failed tests
  320. #### Changed
  321. - Improve logging for DefaultExtensionFinder
  322. - Add defense for [#21]: (not find META-INF/extensions.idx)
  323. - [#44]: Replace `Version` class with `semver` lib
  324. - [#55]: Stop plugin leafs first
  325. - [63]: Extended pf4j to allow custom class loaders to be created
  326. #### Added
  327. - [#33]: Add demo build configuration with Gradle
  328. - [#40]: Add Plugin status provider
  329. - [#41]: Added plugin archive source abstraction
  330. - Added test for DefaultPluginRepository
  331. #### Removed
  332. [unreleased]: https://github.com/decebals/pf4j/compare/release-3.9.0...HEAD
  333. [3.9.0]: https://github.com/decebals/pf4j/compare/release-3.8.0...release-3.9.0
  334. [3.8.0]: https://github.com/decebals/pf4j/compare/release-3.7.0...release-3.8.0
  335. [3.7.0]: https://github.com/decebals/pf4j/compare/release-3.6.0...release-3.7.0
  336. [3.6.0]: https://github.com/decebals/pf4j/compare/release-3.5.0...release-3.6.0
  337. [3.5.0]: https://github.com/decebals/pf4j/compare/release-3.4.1...release-3.5.0
  338. [3.4.1]: https://github.com/decebals/pf4j/compare/release-3.4.0...release-3.4.1
  339. [3.4.1]: https://github.com/decebals/pf4j/compare/release-3.3.0...release-3.4.0
  340. [3.3.0]: https://github.com/decebals/pf4j/compare/release-3.2.0...release-3.3.0
  341. [3.2.0]: https://github.com/decebals/pf4j/compare/release-3.1.0...release-3.2.0
  342. [3.1.0]: https://github.com/decebals/pf4j/compare/release-3.0.0...release-3.1.0
  343. [3.0.0]: https://github.com/decebals/pf4j/compare/release-2.6.0...release-3.0.0
  344. [2.6.0]: https://github.com/decebals/pf4j/compare/release-2.5.0...release-2.6.0
  345. [2.5.0]: https://github.com/decebals/pf4j/compare/release-2.4.0...release-2.5.0
  346. [2.4.0]: https://github.com/decebals/pf4j/compare/release-2.3.0...release-2.4.0
  347. [2.3.0]: https://github.com/decebals/pf4j/compare/release-2.2.0...release-2.3.0
  348. [2.2.0]: https://github.com/decebals/pf4j/compare/release-2.1.0...release-2.2.0
  349. [2.1.0]: https://github.com/decebals/pf4j/compare/release-2.0.0...release-2.1.0
  350. [2.0.0]: https://github.com/decebals/pf4j/compare/release-1.3.0...release-2.0.0
  351. [1.3.0]: https://github.com/decebals/pf4j/compare/release-1.2.0...release-1.3.0
  352. [1.2.0]: https://github.com/decebals/pf4j/compare/release-1.1.1...release-1.2.0
  353. [1.1.1]: https://github.com/decebals/pf4j/compare/release-1.1.0...release-1.1.1
  354. [1.1.0]: https://github.com/decebals/pf4j/compare/release-1.0.0...release-1.1.0
  355. [1.0.0]: https://github.com/decebals/pf4j/compare/release-0.13.1...release-1.0.0
  356. [0.13.1]: https://github.com/decebals/pf4j/compare/release-0.13.0...release-0.13.1
  357. [0.13.0]: https://github.com/decebals/pf4j/compare/release-0.12.0...release-0.13.0
  358. [0.12.0]: https://github.com/decebals/pf4j/compare/release-0.11.0...release-0.12.0
  359. [0.11.0]: https://github.com/decebals/pf4j/compare/release-0.10.0...release-0.11.0
  360. [0.10.0]: https://github.com/decebals/pf4j/compare/release-0.9.0...release-0.10.0
  361. [#512]: https://github.com/pf4j/pf4j/pull/512
  362. [#508]: https://github.com/pf4j/pf4j/issues/508
  363. [#492]: https://github.com/pf4j/pf4j/issues/492
  364. [#490]: https://github.com/pf4j/pf4j/pull/490
  365. [#455]: https://github.com/pf4j/pf4j/pull/455
  366. [#451]: https://github.com/pf4j/pf4j/pull/451
  367. [#450]: https://github.com/pf4j/pf4j/pull/450
  368. [#435]: https://github.com/pf4j/pf4j/pull/435
  369. [#430]: https://github.com/pf4j/pf4j/pull/430
  370. [#426]: https://github.com/pf4j/pf4j/pull/426
  371. [#415]: https://github.com/pf4j/pf4j/pull/415
  372. [#404]: https://github.com/pf4j/pf4j/pull/404
  373. [#402]: https://github.com/pf4j/pf4j/pull/402
  374. [#400]: https://github.com/pf4j/pf4j/issues/400
  375. [#398]: https://github.com/pf4j/pf4j/pull/398
  376. [#396]: https://github.com/pf4j/pf4j/issues/396
  377. [#395]: https://github.com/pf4j/pf4j/issues/395
  378. [#394]: https://github.com/pf4j/pf4j/issues/394
  379. [#378]: https://github.com/pf4j/pf4j/issues/378
  380. [#391]: https://github.com/pf4j/pf4j/issues/391
  381. [#371]: https://github.com/pf4j/pf4j/issues/371
  382. [#370]: https://github.com/pf4j/pf4j/pull/370
  383. [#366]: https://github.com/pf4j/pf4j/pull/366
  384. [#365]: https://github.com/pf4j/pf4j/pull/365
  385. [#364]: https://github.com/pf4j/pf4j/pull/364
  386. [#363]: https://github.com/pf4j/pf4j/issues/363
  387. [#359]: https://github.com/pf4j/pf4j/issues/359
  388. [#355]: https://github.com/pf4j/pf4j/issues/355
  389. [#352]: https://github.com/pf4j/pf4j/pull/352
  390. [#350]: https://github.com/pf4j/pf4j/pull/350
  391. [#349]: https://github.com/pf4j/pf4j/pull/349
  392. [#348]: https://github.com/pf4j/pf4j/pull/348
  393. [#337]: https://github.com/pf4j/pf4j/pull/337
  394. [#335]: https://github.com/pf4j/pf4j/issues/335
  395. [#330]: https://github.com/pf4j/pf4j/pull/330
  396. [#328]: https://github.com/pf4j/pf4j/pull/328
  397. [#323]: https://github.com/pf4j/pf4j/pull/323
  398. [#322]: https://github.com/pf4j/pf4j/pull/322
  399. [#311]: https://github.com/pf4j/pf4j/issues/311
  400. [#309]: https://github.com/pf4j/pf4j/issues/309
  401. [#307]: https://github.com/pf4j/pf4j/issues/307
  402. [#306]: https://github.com/pf4j/pf4j/issues/306
  403. [#298]: https://github.com/pf4j/pf4j/pull/298
  404. [#297]: https://github.com/pf4j/pf4j/issues/297
  405. [#296]: https://github.com/pf4j/pf4j/issues/296
  406. [#294]: https://github.com/pf4j/pf4j/issues/294
  407. [#292]: https://github.com/pf4j/pf4j/issues/292
  408. [#288]: https://github.com/pf4j/pf4j/pull/288
  409. [#287]: https://github.com/pf4j/pf4j/pull/287
  410. [#278]: https://github.com/pf4j/pf4j/pull/278
  411. [#277]: https://github.com/pf4j/pf4j/pull/277
  412. [#276]: https://github.com/pf4j/pf4j/pull/276
  413. [#275]: https://github.com/pf4j/pf4j/pull/275
  414. [#273]: https://github.com/pf4j/pf4j/pull/273
  415. [#271]: https://github.com/pf4j/pf4j/pull/271
  416. [#270]: https://github.com/pf4j/pf4j/pull/270
  417. [#265]: https://github.com/pf4j/pf4j/pull/265
  418. [#262]: https://github.com/pf4j/pf4j/pull/262
  419. [#256]: https://github.com/pf4j/pf4j/pull/256
  420. [#252]: https://github.com/pf4j/pf4j/issues/252
  421. [#250]: https://github.com/pf4j/pf4j/issues/250
  422. [#248]: https://github.com/pf4j/pf4j/issues/248
  423. [#242]: https://github.com/pf4j/pf4j/issues/242
  424. [#233]: https://github.com/pf4j/pf4j/pull/233
  425. [#232]: https://github.com/pf4j/pf4j/issues/232
  426. [#229]: https://github.com/pf4j/pf4j/issues/229
  427. [#223]: https://github.com/pf4j/pf4j/issues/223
  428. [#222]: https://github.com/pf4j/pf4j/pull/222
  429. [#219]: https://github.com/pf4j/pf4j/pull/219
  430. [#218]: https://github.com/pf4j/pf4j/issues/218
  431. [#209]: https://github.com/pf4j/pf4j/issues/209
  432. [#206]: https://github.com/pf4j/pf4j/issues/206
  433. [#203]: https://github.com/pf4j/pf4j/issues/203
  434. [#202]: https://github.com/pf4j/pf4j/issues/202
  435. [#200]: https://github.com/decebals/pf4j/issues/200
  436. [#199]: https://github.com/pf4j/pf4j/issues/199
  437. [#197]: https://github.com/decebals/pf4j/pull/197
  438. [#194]: https://github.com/decebals/pf4j/pull/194
  439. [#190]: https://github.com/decebals/pf4j/issues/190
  440. [#184]: https://github.com/decebals/pf4j/issues/184
  441. [#180]: https://github.com/decebals/pf4j/pull/180
  442. [#178]: https://github.com/decebals/pf4j/pull/178
  443. [#177]: https://github.com/decebals/pf4j/pull/177
  444. [#172]: https://github.com/decebals/pf4j/pull/172
  445. [#171]: https://github.com/pf4j/pf4j/issues/171
  446. [#168]: https://github.com/decebals/pf4j/pull/168
  447. [#166]: https://github.com/decebals/pf4j/issues/166
  448. [#156]: https://github.com/decebals/pf4j/issues/156
  449. [#155]: https://github.com/decebals/pf4j/pull/155
  450. [#150]: https://github.com/decebals/pf4j/pull/150
  451. [#149]: https://github.com/decebals/pf4j/pull/149
  452. [#146]: https://github.com/decebals/pf4j/pull/146
  453. [#140]: https://github.com/decebals/pf4j/pull/140
  454. [#139]: https://github.com/decebals/pf4j/pull/139
  455. [#138]: https://github.com/decebals/pf4j/pull/138
  456. [#137]: https://github.com/decebals/pf4j/pull/137
  457. [#136]: https://github.com/decebals/pf4j/pull/136
  458. [#135]: https://github.com/decebals/pf4j/pull/135
  459. [#134]: https://github.com/decebals/pf4j/pull/134
  460. [#133]: https://github.com/decebals/pf4j/pull/133
  461. [#131]: https://github.com/decebals/pf4j/pull/131
  462. [#130]: https://github.com/decebals/pf4j/pull/130
  463. [#129]: https://github.com/decebals/pf4j/pull/129
  464. [#128]: https://github.com/decebals/pf4j/pull/128
  465. [#125]: https://github.com/decebals/pf4j/pull/125
  466. [#122]: https://github.com/decebals/pf4j/pull/122
  467. [#116]: https://github.com/decebals/pf4j/issues/116
  468. [#111]: https://github.com/decebals/pf4j/pull/111
  469. [#108]: https://github.com/decebals/pf4j/pull/108
  470. [#107]: https://github.com/decebals/pf4j/issues/107
  471. [#103]: https://github.com/decebals/pf4j/issues/103
  472. [#100]: https://github.com/decebals/pf4j/issues/100
  473. [#99]: https://github.com/decebals/pf4j/issues/99
  474. [#98]: https://github.com/decebals/pf4j/issues/98
  475. [#97]: https://github.com/decebals/pf4j/issues/97
  476. [#91]: https://github.com/decebals/pf4j/issues/91
  477. [#89]: https://github.com/decebals/pf4j/pull/89
  478. [#85]: https://github.com/decebals/pf4j/issues/85
  479. [#84]: https://github.com/decebals/pf4j/issues/84
  480. [#83]: https://github.com/decebals/pf4j/issues/83
  481. [#78]: https://github.com/decebals/pf4j/issues/78
  482. [#70]: https://github.com/decebals/pf4j/issues/70
  483. [#66]: https://github.com/decebals/pf4j/issues/66
  484. [#63]: https://github.com/decebals/pf4j/issues/63
  485. [#60]: https://github.com/decebals/pf4j/issues/60
  486. [#55]: https://github.com/decebals/pf4j/pull/55
  487. [#44]: https://github.com/decebals/pf4j/pull/44
  488. [#42]: https://github.com/decebals/pf4j/pull/42
  489. [#41]: https://github.com/decebals/pf4j/pull/41
  490. [#40]: https://github.com/decebals/pf4j/pull/40
  491. [#39]: https://github.com/decebals/pf4j/pull/39
  492. [#33]: https://github.com/decebals/pf4j/pull/33
  493. [#21]: https://github.com/decebals/pf4j/issues/21