Skip to content

Commit 96dc45e

Browse files
committed
Added option to specify classloader (1.8.1)
1 parent c517e4f commit 96dc45e

8 files changed

Lines changed: 48 additions & 19 deletions

File tree

client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8</version>
9+
<version>1.8.1</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.client</groupId>

common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8</version>
9+
<version>1.8.1</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.common</groupId>

dependencyInjection/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8</version>
9+
<version>1.8.1</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.injector</groupId>

dependencyInjection/src/main/java/cat/michal/catbase/injector/CatBaseInjector.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,40 @@ public class CatBaseInjector implements Injector {
1414
private final List<Class<?>> classes;
1515

1616
public CatBaseInjector(Collection<String> packagePaths) {
17-
this(new ArrayList<>(), packagePaths);
17+
this(new ArrayList<>(), packagePaths, null);
1818
}
1919

2020
public CatBaseInjector(String packagePath) {
21-
this(new ArrayList<>(), List.of(packagePath));
21+
this(new ArrayList<>(), List.of(packagePath), null);
2222
}
2323

2424
public CatBaseInjector(List<Dependency<?>> dependencies, String packagePath) {
25-
this(dependencies, List.of(packagePath));
25+
this(dependencies, List.of(packagePath), null);
2626
}
2727

28+
public CatBaseInjector(Collection<String> packagePaths, ClassLoader classLoader) {
29+
this(new ArrayList<>(), packagePaths, classLoader);
30+
}
31+
32+
public CatBaseInjector(String packagePath, ClassLoader classLoader) {
33+
this(new ArrayList<>(), List.of(packagePath), classLoader);
34+
}
35+
36+
public CatBaseInjector(List<Dependency<?>> dependencies, String packagePath, ClassLoader classLoader) {
37+
this(dependencies, List.of(packagePath), classLoader);
38+
}
39+
40+
2841
public CatBaseInjector(List<Dependency<?>> dependencies, Collection<String> packagePaths) {
42+
this(dependencies, packagePaths, null);
43+
}
44+
45+
public CatBaseInjector(List<Dependency<?>> dependencies, Collection<String> packagePaths, ClassLoader classLoader) {
2946
this.dependencies = new ArrayList<>(dependencies);
3047
this.classes = new ArrayList<>();
31-
packagePaths.forEach(packagePath -> this.classes.addAll(ClassFinder.findAllClasses(packagePath)));
48+
ClassFinder classFinder = classLoader == null ? new ClassFinder() : new ClassFinder(classLoader);
49+
50+
packagePaths.forEach(packagePath -> this.classes.addAll(classFinder.findAllClasses(packagePath)));
3251

3352
this.registerInjectables();
3453
}

dependencyInjection/src/main/java/cat/michal/catbase/injector/ClassFinder.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,31 @@
1414
import java.util.stream.Collectors;
1515

1616
public class ClassFinder {
17-
public static List<Class<?>> findAllClasses(String packageName) {
17+
private final ClassLoader classLoader;
18+
19+
ClassFinder(ClassLoader classLoader) {
20+
this.classLoader = classLoader;
21+
}
22+
23+
ClassFinder() {
24+
this(ClassLoader.getSystemClassLoader());
25+
}
26+
27+
public List<Class<?>> findAllClasses(String packageName) {
1828
return findAllClassesPaths(packageName).stream()
19-
.map(ClassFinder::getClass)
29+
.map(this::getClass)
2030
.filter(Objects::nonNull)
2131
.collect(Collectors.toList());
2232
}
2333

24-
public static List<String> findAllClassesPaths(String packageName) {
25-
URL resource = ClassLoader.getSystemClassLoader().getResource(packageName.replace('.', '/'));
34+
public List<String> findAllClassesPaths(String packageName) {
35+
URL resource = classLoader.getResource(packageName.replace('.', '/'));
2636
assert resource != null;
2737
if (resource.getProtocol().startsWith("jar")) {
2838
return enumerateJar(packageName, resource);
2939
}
3040

31-
InputStream stream = ClassLoader.getSystemClassLoader()
41+
InputStream stream = classLoader
3242
.getResourceAsStream(packageName.replace('.', '/'));
3343

3444
assert stream != null;
@@ -46,7 +56,7 @@ public static List<String> findAllClassesPaths(String packageName) {
4656
return classes;
4757
}
4858

49-
private static List<String> enumerateJar(String packageName, URL resource) {
59+
private List<String> enumerateJar(String packageName, URL resource) {
5060
try {
5161
String[] parts = resource.toString().split("!/");
5262
String jarFilePath = parts[0].substring("jar:file:".length());
@@ -70,11 +80,11 @@ private static List<String> enumerateJar(String packageName, URL resource) {
7080
}
7181
}
7282

73-
private static Class<?> getClass(String className) {
83+
private Class<?> getClass(String className) {
7484
try {
7585
return Class.forName(className.substring(0, className.lastIndexOf('.')));
7686
} catch (ClassNotFoundException ignored) {
7787
}
7888
return null;
7989
}
80-
}
90+
}

integrationTests/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8</version>
9+
<version>1.8.1</version>
1010
</parent>
1111

1212
<artifactId>integrationTests</artifactId>

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8</version>
9+
<version>1.8.1</version>
1010
<packaging>pom</packaging>
1111
<modules>
1212
<module>server</module>
@@ -17,7 +17,7 @@
1717
</modules>
1818

1919
<properties>
20-
<catbase.version>1.8</catbase.version>
20+
<catbase.version>1.8.1</catbase.version>
2121
<maven.compiler.source>17</maven.compiler.source>
2222
<maven.compiler.target>17</maven.compiler.target>
2323
</properties>

server/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8</version>
9+
<version>1.8.1</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.server</groupId>

0 commit comments

Comments
 (0)