diff --git a/core-java-modules/core-java-classloader/pom.xml b/core-java-modules/core-java-classloader/pom.xml
index dd5be7d18177..f0d530c94f63 100644
--- a/core-java-modules/core-java-classloader/pom.xml
+++ b/core-java-modules/core-java-classloader/pom.xml
@@ -11,6 +11,15 @@
0.0.1-SNAPSHOT
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+ test
+
+
+
@@ -36,11 +45,4 @@
-
- 22
- 22
- UTF-8
- 22
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ClassloaderDelegationModelTest.java b/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ClassloaderDelegationModelUnitTest.java
similarity index 98%
rename from core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ClassloaderDelegationModelTest.java
rename to core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ClassloaderDelegationModelUnitTest.java
index 148a71fbddf3..3d4c3e38d303 100644
--- a/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ClassloaderDelegationModelTest.java
+++ b/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ClassloaderDelegationModelUnitTest.java
@@ -15,7 +15,7 @@
import com.baeldung.classloader.internal.InternalClasspathResolver;
import com.baeldung.classloader.internal.InternalJdkSupport;
-class ClassloaderDelegationModelTest {
+class ClassloaderDelegationModelUnitTest {
private static final String CLASS_TO_LOAD = "com.google.common.base.Function";
diff --git a/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/GetURLsFromClassloaderTest.java b/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/GetURLsFromClassloaderUnitTest.java
similarity index 98%
rename from core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/GetURLsFromClassloaderTest.java
rename to core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/GetURLsFromClassloaderUnitTest.java
index 98862ac706af..efa263d2bfc9 100644
--- a/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/GetURLsFromClassloaderTest.java
+++ b/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/GetURLsFromClassloaderUnitTest.java
@@ -20,7 +20,7 @@
import com.baeldung.classloader.internal.InternalClasspathResolver;
import com.baeldung.classloader.internal.InternalJdkSupport;
-class GetURLsFromClassloaderTest {
+class GetURLsFromClassloaderUnitTest {
final Logger log = LoggerFactory.getLogger(getClass());
diff --git a/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ScopedClassLoadingTest.java b/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ScopedClassLoadingUnitTest.java
similarity index 73%
rename from core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ScopedClassLoadingTest.java
rename to core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ScopedClassLoadingUnitTest.java
index 52694fd2f592..02a04abae04b 100644
--- a/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ScopedClassLoadingTest.java
+++ b/core-java-modules/core-java-classloader/src/test/java/com/baeldung/classloader/ScopedClassLoadingUnitTest.java
@@ -9,6 +9,8 @@
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
@@ -24,27 +26,26 @@
import com.baeldung.classloader.internal.InternalJdkSupport;
import com.baeldung.classloader.spi.ClasspathResolver;
-class ScopedClassLoadingTest {
+class ScopedClassLoadingUnitTest {
final Logger log = LoggerFactory.getLogger(getClass());
/**
* Some ides may treat test-classes as a dynamic module-path.
- *
*/
private void ammendTestClasspath(Set classpath) {
var testCp = classpath.stream()
- .filter(url -> Objects.equals(url.getProtocol(), "file") && url.getPath()
- .contains("test-classes"))
- .findFirst()
- .orElse(null);
+ .filter(url -> Objects.equals(url.getProtocol(), "file") && url.getPath()
+ .contains("test-classes"))
+ .findFirst()
+ .orElse(null);
if (testCp == null) {
log.info("Amending test classpath for Eclipse");
var loc = getClass().getProtectionDomain()
- .getCodeSource()
- .getLocation();
+ .getCodeSource()
+ .getLocation();
testCp = toURL(loc.toString());
@@ -60,15 +61,15 @@ private Set createNarrowClasspath(Predicate filter) {
var loader = getClass().getClassLoader();
var full = ClasspathResolver.get()
- .getFullClasspath(loader);
+ .getFullClasspath(loader);
ammendTestClasspath(full);
mergeClasspathWithModulePath(full, filter);
var classpath = full.stream()
- .filter(filter)
- .collect(Collectors.toCollection(HashSet::new));
+ .filter(filter)
+ .collect(Collectors.toCollection(HashSet::new));
log.info("Narrowed Classpath: \n[\n{}\n]", classpath);
@@ -80,14 +81,14 @@ void givenAForkedJVM_whenClassPathIsNarrowed_thenAccessWillBeLimitedToItsScope()
var scope = Pattern.compile("(test-classes|slf|logback)");
var classpath = createNarrowClasspath(url -> scope.matcher(url.toString())
- .find()).stream()
- .map(URL::toString)
- .collect(Collectors.joining(":"));
+ .find()).stream()
+ .map(URL::toString)
+ .collect(Collectors.joining(":"));
var executable = ProcessHandle.current()
- .info()
- .command()
- .orElse("java");
+ .info()
+ .command()
+ .orElse("java");
var pb = new ProcessBuilder(executable, "-cp");
var command = pb.command();
@@ -99,7 +100,7 @@ void givenAForkedJVM_whenClassPathIsNarrowed_thenAccessWillBeLimitedToItsScope()
pb.redirectError(Redirect.INHERIT);
log.info("VM at PID {} will fork another JVM with narrowed classpath", ProcessHandle.current()
- .pid());
+ .pid());
var process = pb.start();
@@ -110,7 +111,7 @@ void givenAForkedJVM_whenClassPathIsNarrowed_thenAccessWillBeLimitedToItsScope()
@Test
void givenScopedClassLoader_whenClasspathIsNarrowed_thenAccessWillBeLimitedToItsScope() throws InterruptedException, IOException,
- ReflectiveOperationException {
+ ReflectiveOperationException {
var thread = Thread.currentThread();
var current = thread.getContextClassLoader();
@@ -119,7 +120,7 @@ void givenScopedClassLoader_whenClasspathIsNarrowed_thenAccessWillBeLimitedToIts
var scope = Pattern.compile("(test-classes|slf|logback)");
var classpath = createNarrowClasspath(url -> scope.matcher(url.toString())
- .find()).toArray(URL[]::new);
+ .find()).toArray(URL[]::new);
var loader = new CustomClassLoader(classpath);
@@ -127,12 +128,12 @@ void givenScopedClassLoader_whenClasspathIsNarrowed_thenAccessWillBeLimitedToIts
try {
var service = Class.forName(ForkedService.class.getName(), true, Thread.currentThread()
- .getContextClassLoader());
+ .getContextClassLoader());
assertEquals(loader, service.getClassLoader());
((Runnable) service.getConstructor()
- .newInstance()).run();
+ .newInstance()).run();
} finally {
thread.setContextClassLoader(current);
}
@@ -144,22 +145,27 @@ private void mergeClasspathWithModulePath(Set files, Predicate filter)
if (modules != null && !modules.isBlank()) {
log.info("Converting module-path ({}) to classpath", modules);
- Arrays.stream(modules.split(":"))
- .map(this::toURL)
- .filter(filter)
- .forEach(files::add);
+ String pathSeparator = System.getProperty("path.separator");
+
+ Arrays.stream(modules.split(Pattern.quote(pathSeparator)))
+ .map(this::toURL)
+ .filter(filter)
+ .forEach(files::add);
} else {
log.info("No module path");
}
}
private URL toURL(String name) {
- if (!name.startsWith("file:")) {
- name = "file://" + name;
- }
try {
- return URI.create(name)
- .toURL();
+ // If it's already a valid URL, use it as-is
+ if (name.startsWith("file:")) {
+ return URI.create(name).toURL();
+ }
+
+ Path path = Paths.get(name);
+ return path.toUri().toURL();
+
} catch (MalformedURLException e) {
throw new UncheckedIOException(e);
}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 08b2b801ee14..03e2bf72ba6b 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -83,7 +83,7 @@
core-java-arrays-operations-advanced-3
core-java-booleans
core-java-char
-
+
core-java-collections
core-java-collections-2
core-java-collections-3
diff --git a/pom.xml b/pom.xml
index d34acb1b2d77..8a4c37046173 100644
--- a/pom.xml
+++ b/pom.xml
@@ -868,6 +868,7 @@
core-java-modules/core-java-22
core-java-modules/core-java-concurrency-advanced-6
+ core-java-modules/core-java-classloader
@@ -1292,6 +1293,7 @@
core-java-modules/core-java-22
core-java-modules/core-java-concurrency-advanced-6
+ core-java-modules/core-java-classloader
@@ -1506,7 +1508,6 @@
web-modules/ninja
spring-cloud-modules/spring-cloud-task/springcloudtaskbatch
aspectj
- core-java-modules/core-java-classloader
persistence-modules/hibernate-queries-2
@@ -1573,7 +1574,6 @@
web-modules/ninja
spring-cloud-modules/spring-cloud-task/springcloudtaskbatch
aspectj
- core-java-modules/core-java-classloader
persistence-modules/hibernate-queries-2