diff --git a/pf4j/src/main/java/org/pf4j/DevelopmentPluginClasspath.java b/pf4j/src/main/java/org/pf4j/DevelopmentPluginClasspath.java
index ba86bf5..15da659 100644
--- a/pf4j/src/main/java/org/pf4j/DevelopmentPluginClasspath.java
+++ b/pf4j/src/main/java/org/pf4j/DevelopmentPluginClasspath.java
@@ -16,17 +16,39 @@
package org.pf4j;
/**
- * Overwrite classes directories to {@code target/classes} and lib directories to {@code target/lib}.
+ * It's a compound {@link PluginClasspath} ({@link #MAVEN} + {@link #GRADLE} + {@link #KOTLIN})
+ * used in development mode ({@link RuntimeMode#DEVELOPMENT}).
*
* @author Decebal Suiu
*/
public class DevelopmentPluginClasspath extends PluginClasspath {
- public DevelopmentPluginClasspath() {
- super();
+ /**
+ * The development plugin classpath for Maven.
+ * The classes directory is {@code target/classes} and the lib directory is {@code target/lib}.
+ */
+ public static final PluginClasspath MAVEN = new PluginClasspath().addClassesDirectories("target/classes").addLibDirectories("target/lib");
- addClassesDirectories("target/classes");
- addLibDirectories("target/lib");
+ /**
+ * The development plugin classpath for Gradle.
+ * The classes directories are {@code build/classes/java/main, build/resources/main}.
+ */
+ public static final PluginClasspath GRADLE = new PluginClasspath().addClassesDirectories("build/classes/java/main", "build/resources/main");
+
+ /**
+ * The development plugin classpath for Kotlin.
+ * The classes directories are {@code build/classes/kotlin/main", build/resources/main, build/tmp/kapt3/classes/main}.
+ */
+ public static final PluginClasspath KOTLIN = new PluginClasspath().addClassesDirectories("build/classes/kotlin/main", "build/resources/main", "build/tmp/kapt3/classes/main");
+
+ public DevelopmentPluginClasspath() {
+ addClassesDirectories(MAVEN.getClassesDirectories());
+ addClassesDirectories(GRADLE.getClassesDirectories());
+ addClassesDirectories(KOTLIN.getClassesDirectories());
+
+ addLibDirectories(MAVEN.getLibDirectories());
+ addLibDirectories(GRADLE.getLibDirectories());
+ addLibDirectories(KOTLIN.getLibDirectories());
}
}
diff --git a/pf4j/src/main/java/org/pf4j/PluginClasspath.java b/pf4j/src/main/java/org/pf4j/PluginClasspath.java
index 2a6f2cc..57ff9bf 100644
--- a/pf4j/src/main/java/org/pf4j/PluginClasspath.java
+++ b/pf4j/src/main/java/org/pf4j/PluginClasspath.java
@@ -15,9 +15,10 @@
*/
package org.pf4j;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
/**
* The classpath of the plugin.
@@ -27,28 +28,35 @@ import java.util.List;
*/
public class PluginClasspath {
- private List classesDirectories;
- private List libDirectories;
+ private Set classesDirectories = new HashSet<>();
+ private Set libDirectories = new HashSet<>();
- public PluginClasspath() {
- classesDirectories = new ArrayList<>();
- libDirectories = new ArrayList<>();
- }
+ public Set getClassesDirectories() {
+ return classesDirectories;
+ }
- public List getClassesDirectories() {
- return classesDirectories;
- }
+ public PluginClasspath addClassesDirectories(String... classesDirectories) {
+ return addClassesDirectories(Arrays.asList(classesDirectories));
+ }
- public void addClassesDirectories(String... classesDirectories) {
- this.classesDirectories.addAll(Arrays.asList(classesDirectories));
- }
+ public PluginClasspath addClassesDirectories(Collection classesDirectories) {
+ this.classesDirectories.addAll(classesDirectories);
- public List getLibDirectories() {
- return libDirectories;
- }
+ return this;
+ }
- public void addLibDirectories(String... libDirectories) {
- this.libDirectories.addAll(Arrays.asList(libDirectories));
- }
+ public Set getLibDirectories() {
+ return libDirectories;
+ }
+
+ public PluginClasspath addLibDirectories(String... libDirectories) {
+ return addLibDirectories(Arrays.asList(libDirectories));
+ }
+
+ public PluginClasspath addLibDirectories(Collection libDirectories) {
+ this.libDirectories.addAll(libDirectories);
+
+ return this;
+ }
}