diff --git a/libraries-4/README.md b/libraries-4/README.md
new file mode 100644
index 0000000000..f650c073a7
--- /dev/null
+++ b/libraries-4/README.md
@@ -0,0 +1,43 @@
+## Libraries
+
+This module contains articles about various Java libraries.
+These are small libraries that are relatively easy to use and do not require any separate module of their own.
+
+The code examples related to different libraries are each in their own module.
+
+Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases.
+
+### Relevant articles
+
+- [Introduction to Javatuples](https://www.baeldung.com/java-tuples)
+- [Introduction to Javassist](https://www.baeldung.com/javassist)
+- [Introduction to Apache Flink with Java](https://www.baeldung.com/apache-flink)
+- [Intro to JaVers](https://www.baeldung.com/javers)
+- [Merging Streams in Java](https://www.baeldung.com/java-merge-streams)
+- [Introduction to Quartz](https://www.baeldung.com/quartz)
+- [How to Warm Up the JVM](https://www.baeldung.com/java-jvm-warmup)
+- [Software Transactional Memory in Java Using Multiverse](https://www.baeldung.com/java-multiverse-stm)
+- [Locality-Sensitive Hashing in Java Using Java-LSH](https://www.baeldung.com/locality-sensitive-hashing)
+- [Introduction to Neuroph](https://www.baeldung.com/neuroph)
+
+#5
+- [Introduction to Caffeine](https://www.baeldung.com/java-caching-caffeine)
+- [Introduction to StreamEx](https://www.baeldung.com/streamex)
+- [A Docker Guide for Java](https://www.baeldung.com/docker-java-api)
+- [Introduction to Akka Actors in Java](https://www.baeldung.com/akka-actors-java)
+- [A Guide to Byte Buddy](https://www.baeldung.com/byte-buddy)
+- [Introduction to jOOL](https://www.baeldung.com/jool)
+- [Consumer Driven Contracts with Pact](https://www.baeldung.com/pact-junit-consumer-driven-contracts)
+- [Introduction to Atlassian Fugue](https://www.baeldung.com/java-fugue)
+- [Publish and Receive Messages with Nats Java Client](https://www.baeldung.com/nats-java-client)
+- [Java Concurrency Utility with JCTools](https://www.baeldung.com/java-concurrency-jc-tools)
+
+#6
+- [Introduction to JavaPoet](https://www.baeldung.com/java-poet)
+- [Guide to Resilience4j](https://www.baeldung.com/resilience4j)
+- [Implementing a FTP-Client in Java](https://www.baeldung.com/java-ftp-client)
+- [Introduction to Functional Java](https://www.baeldung.com/java-functional-library)
+- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library)
+
+- [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once)
+- More articles [[next -->]](/libraries-2)
diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml
new file mode 100644
index 0000000000..1b2db27861
--- /dev/null
+++ b/libraries-4/pom.xml
@@ -0,0 +1,111 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ libraries-4
+
+
+
+ org.jdeferred
+ jdeferred-core
+ ${jdeferred.version}
+
+
+ org.eclipse.collections
+ eclipse-collections
+ ${eclipse-collections.version}
+
+
+ com.haulmont.yarg
+ yarg
+ ${yarg.version}
+
+
+ net.engio
+ mbassador
+ ${mbassador.version}
+
+
+ com.machinezoo.noexception
+ noexception
+ ${noexception.version}
+
+
+ rome
+ rome
+ ${rome.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.datanucleus
+ javax.jdo
+ ${javax.jdo.version}
+
+
+ javax.servlet
+ servlet-api
+ ${javax.servlet.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+
+
+ org.pcollections
+ pcollections
+ ${pcollections.version}
+
+
+ org.awaitility
+ awaitility
+ ${awaitility.version}
+ test
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ javax.el
+ javax.el-api
+ ${javax.el.version}
+
+
+
+
+ 1.2.6
+ 8.2.0
+ 1.1.0
+ 2.0.12
+ 1.3.1
+ 1.0
+ 4.3.8.RELEASE
+ 2.5
+ 3.2.0-m7
+ 0.9.0
+ 3.6.2
+ 2.1.2
+ 3.0.0
+ 0.6.5
+ 3.0.0
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java b/libraries-4/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java
rename to libraries-4/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java
diff --git a/libraries/src/main/java/com/baeldung/distinct/Person.java b/libraries-4/src/main/java/com/baeldung/distinct/Person.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/distinct/Person.java
rename to libraries-4/src/main/java/com/baeldung/distinct/Person.java
diff --git a/libraries/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java b/libraries-4/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java
rename to libraries-4/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java
diff --git a/libraries/src/main/java/com/baeldung/eclipsecollections/Student.java b/libraries-4/src/main/java/com/baeldung/eclipsecollections/Student.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/eclipsecollections/Student.java
rename to libraries-4/src/main/java/com/baeldung/eclipsecollections/Student.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/FilterDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/FilterDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/FilterDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/FilterDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/PipeDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/PipeDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/PipeDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/PipeDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/PromiseDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
diff --git a/libraries/src/main/java/com/baeldung/mbassador/AckMessage.java b/libraries-4/src/main/java/com/baeldung/mbassador/AckMessage.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/mbassador/AckMessage.java
rename to libraries-4/src/main/java/com/baeldung/mbassador/AckMessage.java
diff --git a/libraries/src/main/java/com/baeldung/mbassador/Message.java b/libraries-4/src/main/java/com/baeldung/mbassador/Message.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/mbassador/Message.java
rename to libraries-4/src/main/java/com/baeldung/mbassador/Message.java
diff --git a/libraries/src/main/java/com/baeldung/mbassador/RejectMessage.java b/libraries-4/src/main/java/com/baeldung/mbassador/RejectMessage.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/mbassador/RejectMessage.java
rename to libraries-4/src/main/java/com/baeldung/mbassador/RejectMessage.java
diff --git a/libraries/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java b/libraries-4/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
rename to libraries-4/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
diff --git a/libraries/src/main/java/com/baeldung/pairs/CustomPair.java b/libraries-4/src/main/java/com/baeldung/pairs/CustomPair.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/pairs/CustomPair.java
rename to libraries-4/src/main/java/com/baeldung/pairs/CustomPair.java
diff --git a/libraries/src/main/java/com/baeldung/rome/RSSRomeExample.java b/libraries-4/src/main/java/com/baeldung/rome/RSSRomeExample.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/rome/RSSRomeExample.java
rename to libraries-4/src/main/java/com/baeldung/rome/RSSRomeExample.java
diff --git a/libraries/src/main/java/com/baeldung/yarg/DocumentController.java b/libraries-4/src/main/java/com/baeldung/yarg/DocumentController.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/yarg/DocumentController.java
rename to libraries-4/src/main/java/com/baeldung/yarg/DocumentController.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/PersonDataGenerator.java b/libraries-4/src/test/java/com/baeldung/distinct/PersonDataGenerator.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/PersonDataGenerator.java
rename to libraries-4/src/test/java/com/baeldung/distinct/PersonDataGenerator.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
similarity index 90%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
index 38d95047ed..a1bd280658 100644
--- a/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
+++ b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.collections.api.tuple.Pair;
import org.eclipse.collections.impl.map.mutable.UnifiedMap;
import org.eclipse.collections.impl.tuple.Tuples;
+import org.junit.Assert;
import org.junit.Test;
public class ForEachPatternUnitTest {
@@ -23,7 +24,7 @@ public class ForEachPatternUnitTest {
}
for (int i = 0; i < map.size(); i++) {
- assertEquals("New Value", map.get(i + 1));
+ Assert.assertEquals("New Value", map.get(i + 1));
}
}
}
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/java/io/JavaDirectoryDeleteUnitTest.java b/libraries-4/src/test/java/com/baeldung/io/JavaDirectoryDeleteUnitTest.java
similarity index 96%
rename from libraries/src/test/java/com/baeldung/java/io/JavaDirectoryDeleteUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/io/JavaDirectoryDeleteUnitTest.java
index 53d9d11bbb..c9c8242cd5 100644
--- a/libraries/src/test/java/com/baeldung/java/io/JavaDirectoryDeleteUnitTest.java
+++ b/libraries-4/src/test/java/com/baeldung/io/JavaDirectoryDeleteUnitTest.java
@@ -1,138 +1,138 @@
-package com.baeldung.java.io;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.FileVisitResult;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.springframework.util.FileSystemUtils;
-
-public class JavaDirectoryDeleteUnitTest {
- private static Path TEMP_DIRECTORY;
- private static final String DIRECTORY_NAME = "toBeDeleted";
-
- private static final List ALL_LINES = Arrays.asList("This is line 1", "This is line 2", "This is line 3", "This is line 4", "This is line 5", "This is line 6");
-
- @BeforeClass
- public static void initializeTempDirectory() throws IOException {
- TEMP_DIRECTORY = Files.createTempDirectory("tmpForJUnit");
- }
-
- @AfterClass
- public static void cleanTempDirectory() throws IOException {
- FileUtils.deleteDirectory(TEMP_DIRECTORY.toFile());
- }
-
- @Before
- public void setupDirectory() throws IOException {
- Path tempPathForEachTest = Files.createDirectory(TEMP_DIRECTORY.resolve(DIRECTORY_NAME));
-
- // Create a directory structure
- Files.write(tempPathForEachTest.resolve("file1.txt"), ALL_LINES.subList(0, 2));
- Files.write(tempPathForEachTest.resolve("file2.txt"), ALL_LINES.subList(2, 4));
-
- Files.createDirectories(tempPathForEachTest.resolve("Empty"));
-
- Path aSubDir = Files.createDirectories(tempPathForEachTest.resolve("notEmpty"));
- Files.write(aSubDir.resolve("file3.txt"), ALL_LINES.subList(3, 5));
- Files.write(aSubDir.resolve("file4.txt"), ALL_LINES.subList(0, 3));
-
- aSubDir = Files.createDirectories(aSubDir.resolve("anotherSubDirectory"));
- Files.write(aSubDir.resolve("file5.txt"), ALL_LINES.subList(4, 5));
- Files.write(aSubDir.resolve("file6.txt"), ALL_LINES.subList(0, 2));
- }
-
- @After
- public void checkAndCleanupIfRequired() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
- if (Files.exists(pathToBeDeleted)) {
- FileUtils.deleteDirectory(pathToBeDeleted.toFile());
- }
- }
-
- private boolean deleteDirectory(File directoryToBeDeleted) {
- File[] allContents = directoryToBeDeleted.listFiles();
-
- if (allContents != null) {
- for (File file : allContents) {
- deleteDirectory(file);
- }
- }
-
- return directoryToBeDeleted.delete();
- }
-
- @Test
- public void givenDirectory_whenDeletedWithRecursion_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- boolean result = deleteDirectory(pathToBeDeleted.toFile());
-
- assertTrue("Could not delete directory", result);
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithCommonsIOFileUtils_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- FileUtils.deleteDirectory(pathToBeDeleted.toFile());
-
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithSpringFileSystemUtils_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- boolean result = FileSystemUtils.deleteRecursively(pathToBeDeleted.toFile());
-
- assertTrue("Could not delete directory", result);
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithFilesWalk_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
-
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithNIO2WalkFileTree_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- Files.walkFileTree(pathToBeDeleted, new SimpleFileVisitor() {
- @Override
- public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
- Files.delete(dir);
- return FileVisitResult.CONTINUE;
- }
-
- @Override
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
- Files.delete(file);
- return FileVisitResult.CONTINUE;
- }
- });
-
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-}
+package com.baeldung.io;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.util.FileSystemUtils;
+
+public class JavaDirectoryDeleteUnitTest {
+ private static Path TEMP_DIRECTORY;
+ private static final String DIRECTORY_NAME = "toBeDeleted";
+
+ private static final List ALL_LINES = Arrays.asList("This is line 1", "This is line 2", "This is line 3", "This is line 4", "This is line 5", "This is line 6");
+
+ @BeforeClass
+ public static void initializeTempDirectory() throws IOException {
+ TEMP_DIRECTORY = Files.createTempDirectory("tmpForJUnit");
+ }
+
+ @AfterClass
+ public static void cleanTempDirectory() throws IOException {
+ FileUtils.deleteDirectory(TEMP_DIRECTORY.toFile());
+ }
+
+ @Before
+ public void setupDirectory() throws IOException {
+ Path tempPathForEachTest = Files.createDirectory(TEMP_DIRECTORY.resolve(DIRECTORY_NAME));
+
+ // Create a directory structure
+ Files.write(tempPathForEachTest.resolve("file1.txt"), ALL_LINES.subList(0, 2));
+ Files.write(tempPathForEachTest.resolve("file2.txt"), ALL_LINES.subList(2, 4));
+
+ Files.createDirectories(tempPathForEachTest.resolve("Empty"));
+
+ Path aSubDir = Files.createDirectories(tempPathForEachTest.resolve("notEmpty"));
+ Files.write(aSubDir.resolve("file3.txt"), ALL_LINES.subList(3, 5));
+ Files.write(aSubDir.resolve("file4.txt"), ALL_LINES.subList(0, 3));
+
+ aSubDir = Files.createDirectories(aSubDir.resolve("anotherSubDirectory"));
+ Files.write(aSubDir.resolve("file5.txt"), ALL_LINES.subList(4, 5));
+ Files.write(aSubDir.resolve("file6.txt"), ALL_LINES.subList(0, 2));
+ }
+
+ @After
+ public void checkAndCleanupIfRequired() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+ if (Files.exists(pathToBeDeleted)) {
+ FileUtils.deleteDirectory(pathToBeDeleted.toFile());
+ }
+ }
+
+ private boolean deleteDirectory(File directoryToBeDeleted) {
+ File[] allContents = directoryToBeDeleted.listFiles();
+
+ if (allContents != null) {
+ for (File file : allContents) {
+ deleteDirectory(file);
+ }
+ }
+
+ return directoryToBeDeleted.delete();
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithRecursion_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ boolean result = deleteDirectory(pathToBeDeleted.toFile());
+
+ assertTrue("Could not delete directory", result);
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithCommonsIOFileUtils_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ FileUtils.deleteDirectory(pathToBeDeleted.toFile());
+
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithSpringFileSystemUtils_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ boolean result = FileSystemUtils.deleteRecursively(pathToBeDeleted.toFile());
+
+ assertTrue("Could not delete directory", result);
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithFilesWalk_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithNIO2WalkFileTree_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ Files.walkFileTree(pathToBeDeleted, new SimpleFileVisitor() {
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+}
diff --git a/libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java b/libraries-4/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java b/libraries-4/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java b/libraries-4/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java
diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml
new file mode 100644
index 0000000000..b5a1ecd49c
--- /dev/null
+++ b/libraries-5/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ libraries-5
+
+
+
\ No newline at end of file
diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml
new file mode 100644
index 0000000000..be74ff9ef0
--- /dev/null
+++ b/libraries-6/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ libraries-6
+
+
+
\ No newline at end of file
diff --git a/libraries/README.md b/libraries/README.md
index 79ba8fe55d..3f259e4222 100644
--- a/libraries/README.md
+++ b/libraries/README.md
@@ -19,6 +19,8 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Software Transactional Memory in Java Using Multiverse](https://www.baeldung.com/java-multiverse-stm)
- [Locality-Sensitive Hashing in Java Using Java-LSH](https://www.baeldung.com/locality-sensitive-hashing)
- [Introduction to Neuroph](https://www.baeldung.com/neuroph)
+
+#4
- [Quick Guide to RSS with Rome](https://www.baeldung.com/rome-rss)
- [Introduction to PCollections](https://www.baeldung.com/java-pcollections)
- [Introduction to Eclipse Collections](https://www.baeldung.com/eclipse-collections)
@@ -29,6 +31,8 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Guide to JDeferred](https://www.baeldung.com/jdeferred)
- [Introduction to MBassador](https://www.baeldung.com/mbassador)
- [Using Pairs in Java](https://www.baeldung.com/java-pairs)
+
+#5
- [Introduction to Caffeine](https://www.baeldung.com/java-caching-caffeine)
- [Introduction to StreamEx](https://www.baeldung.com/streamex)
- [A Docker Guide for Java](https://www.baeldung.com/docker-java-api)
@@ -39,10 +43,13 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Introduction to Atlassian Fugue](https://www.baeldung.com/java-fugue)
- [Publish and Receive Messages with Nats Java Client](https://www.baeldung.com/nats-java-client)
- [Java Concurrency Utility with JCTools](https://www.baeldung.com/java-concurrency-jc-tools)
+
+#6
- [Introduction to JavaPoet](https://www.baeldung.com/java-poet)
- [Guide to Resilience4j](https://www.baeldung.com/resilience4j)
-- [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once)
- [Implementing a FTP-Client in Java](https://www.baeldung.com/java-ftp-client)
- [Introduction to Functional Java](https://www.baeldung.com/java-functional-library)
- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library)
+
+- [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once)
- More articles [[next -->]](/libraries-2)
diff --git a/libraries/pom.xml b/libraries/pom.xml
index 41bc2b9311..5d540f0d90 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -70,11 +70,11 @@
${jnats.version}
-
- rome
- rome
- ${rome.version}
-
+
+
+
+
+
net.serenity-bdd
serenity-core
@@ -218,11 +218,11 @@
quartz
${quartz.version}
-
- one.util
- streamex
- ${streamex.version}
-
+
+
+
+
+
org.jooq
jool
@@ -256,18 +256,18 @@
-
- org.awaitility
- awaitility
- ${awaitility.version}
- test
-
-
- org.awaitility
- awaitility-proxy
- ${awaitility.version}
- test
-
+
+
+
+
+
+
+
+
+
+
+
+
org.hamcrest
java-hamcrest
@@ -284,42 +284,42 @@
byte-buddy-agent
${bytebuddy.version}
-
- org.pcollections
- pcollections
- ${pcollections.version}
-
-
- com.machinezoo.noexception
- noexception
- ${noexception.version}
-
-
- org.eclipse.collections
- eclipse-collections
- ${eclipse-collections.version}
-
-
- io.vavr
- vavr
- ${vavr.version}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- com.haulmont.yarg
- yarg
- ${yarg.version}
-
-
- net.engio
- mbassador
- ${mbassador.version}
-
-
- org.jdeferred
- jdeferred-core
- ${jdeferred.version}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
com.codepoetics
protonpack
@@ -572,14 +572,14 @@
1.1.0
0.10
3.5.0
- 3.0.0
+
2.0.0.0
1.7.1
- 2.1.2
- 1.0
- 8.2.0
- 0.6.5
- 0.9.0
+
+
+
+
+
1.15
2.5.5
@@ -604,10 +604,10 @@
2.3.0
0.9.12
1.19
- 1.1.0
- 2.0.4
- 1.3.1
- 1.2.6
+
+
+
+
4.8.1
4.5.1
3.0.2
diff --git a/pom.xml b/pom.xml
index 44a94095b3..d481f95042 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1011,6 +1011,10 @@
libraries-2
libraries-3
+ libraries-4
+
+
+
libraries-apache-commons
libraries-apache-commons-collections
libraries-apache-commons-io