diff --git a/core-java-modules/core-java-arrays-operations-basic-3/src/test/java/com/baeldung/signchanges/SignChangesInAnArrayUnitTest.java b/core-java-modules/core-java-arrays-operations-basic-3/src/test/java/com/baeldung/signchanges/SignChangesInAnArrayUnitTest.java
new file mode 100644
index 000000000000..bb942356c559
--- /dev/null
+++ b/core-java-modules/core-java-arrays-operations-basic-3/src/test/java/com/baeldung/signchanges/SignChangesInAnArrayUnitTest.java
@@ -0,0 +1,63 @@
+package com.baeldung.signchanges;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.stream.IntStream;
+
+public class SignChangesInAnArrayUnitTest {
+
+ int[] sampleArray = {1, -2, -3, 4, 0, -1, 5};
+
+ int countSignChanges(int[] arr) {
+ if (arr == null || arr.length < 2) {
+ return 0;
+ }
+ int count = 0;
+
+ int prevSign = Integer.signum(arr[0]);
+
+ for (int i = 1; i < arr.length; i++) {
+ int currentSign = Integer.signum(arr[i]);
+
+ if (currentSign != 0 && prevSign != 0 && currentSign != prevSign) {
+ count++;
+ }
+
+ if (currentSign != 0) {
+ prevSign = currentSign;
+ }
+ }
+
+ return count;
+ }
+
+ @Test
+ void givenArray_whenExistsSignChanges_thenReturnSignChangesQuantity() {
+ int result = countSignChanges(sampleArray);
+ Assertions.assertThat(result).isEqualTo(4);
+ }
+
+ int countSignChangesStream(int[] arr) {
+ if (arr == null || arr.length < 2) {
+ return 0;
+ }
+
+ int[] signs = Arrays.stream(arr)
+ .map(Integer::signum)
+ .filter(s -> s != 0)
+ .toArray();
+
+ return (int) IntStream.range(1, signs.length)
+ .filter(i -> signs[i] != signs[i - 1])
+ .count();
+ }
+
+ @Test
+ void givenArray_whenUsingStreams_thenReturnSignChangesQuantity() {
+ int result = countSignChangesStream(sampleArray);
+ Assertions.assertThat(result).isEqualTo(4);
+ }
+
+}
diff --git a/core-java-modules/core-java-string-algorithms-5/src/main/java/com/baeldung/uniqueint/StringToUniqueInt.java b/core-java-modules/core-java-string-algorithms-5/src/main/java/com/baeldung/uniqueint/StringToUniqueInt.java
index 5128714be205..2eb104f05018 100644
--- a/core-java-modules/core-java-string-algorithms-5/src/main/java/com/baeldung/uniqueint/StringToUniqueInt.java
+++ b/core-java-modules/core-java-string-algorithms-5/src/main/java/com/baeldung/uniqueint/StringToUniqueInt.java
@@ -38,12 +38,12 @@ public static int toIntByMD5(String value) {
}
public static int toIntByLookup(String value) {
- var found = lookupMap.get(value);
+ Integer found = lookupMap.get(value);
if (found != null) {
return found;
}
- var intValue = counter.incrementAndGet();
+ Integer intValue = counter.incrementAndGet();
lookupMap.put(value, intValue);
return intValue;
}
diff --git a/core-java-modules/core-java-swing/pom.xml b/core-java-modules/core-java-swing/pom.xml
index 462e31e439f5..d7e481b0fc0e 100644
--- a/core-java-modules/core-java-swing/pom.xml
+++ b/core-java-modules/core-java-swing/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-swing
jar
@@ -19,4 +19,8 @@
UTF-8
+
+ src/main/java
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-swing/src/main/java/com/baeldung/clipboard/AwtClipboard.java b/core-java-modules/core-java-swing/src/main/java/com/baeldung/clipboard/AwtClipboard.java
new file mode 100644
index 000000000000..3d3959fa80e2
--- /dev/null
+++ b/core-java-modules/core-java-swing/src/main/java/com/baeldung/clipboard/AwtClipboard.java
@@ -0,0 +1,39 @@
+package com.baeldung.clipboard;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.awt.datatransfer.DataFlavor;
+
+public class AwtClipboard {
+
+ public static void main(String[] args) throws IOException, UnsupportedFlavorException {
+ String textToCopy = "Baeldung helps developers explore the Java ecosystem and simply be better engineers.";
+ copyToClipboard(textToCopy);
+
+ String textCopied = copyFromClipboard();
+ if (textCopied != null) {
+ System.out.println(textCopied);
+ }
+ }
+
+ public static void copyToClipboard(String text) {
+ Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
+ StringSelection data = new StringSelection(text);
+ cb.setContents(data, null);
+ }
+
+ public static String copyFromClipboard() throws UnsupportedFlavorException, IOException {
+ Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
+ Transferable transferable = cb.getContents(null);
+ if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+ String data = (String) transferable.getTransferData(DataFlavor.stringFlavor);
+ return data;
+ }
+ System.out.println("Couldn't get data from the clipboard");
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml
index 471e0eac97d2..41c26a2ea340 100644
--- a/libraries-2/pom.xml
+++ b/libraries-2/pom.xml
@@ -13,11 +13,6 @@
-
- io.github.classgraph
- classgraph
- ${classgraph.version}
-
org.jbpm
jbpm-test
@@ -31,17 +26,6 @@
-
- edu.uci.ics
- crawler4j
- ${crawler4j.version}
-
-
- com.sleepycat
- je
-
-
-
com.github.jknack
handlebars
@@ -57,11 +41,6 @@
je
${sleepycat-je.version}
-
- org.mapdb
- mapdb
- ${mapdb.version}
-
commons-io
commons-io
@@ -96,11 +75,6 @@
value
${immutables.version}
-
- io.nats
- jnats
- ${jnats.version}
-
org.mutabilitydetector
MutabilityDetector
@@ -108,10 +82,44 @@
test
- org.awaitility
- awaitility
- ${awaitility.version}
- test
+ com.squareup
+ javapoet
+ ${javapoet.version}
+
+
+ com.googlecode.libphonenumber
+ libphonenumber
+ ${libphonenumber.version}
+
+
+ com.github.javaparser
+ javaparser-core
+ ${javaparser.version}
+
+
+ org.soot-oss
+ sootup.core
+ ${sootup.version}
+
+
+ org.soot-oss
+ sootup.java.core
+ ${sootup.version}
+
+
+ org.soot-oss
+ sootup.java.sourcecode
+ ${sootup.version}
+
+
+ org.soot-oss
+ sootup.java.bytecode
+ ${sootup.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
@@ -126,19 +134,18 @@
- 3.0.8
- 4.8.153
7.20.0.Final
- 4.4.0
4.3.1
2.7.1
2.5.2.Final
18.3.12
3.0.14
2.5.6
- 2.17.3
0.9.6
- 4.2.1
+ 1.10.0
+ 8.12.9
+ 3.25.10
+ 1.3.0
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/javapoet/PersonGenerator.java b/libraries-2/src/main/java/com/baeldung/javapoet/PersonGenerator.java
similarity index 99%
rename from libraries/src/main/java/com/baeldung/javapoet/PersonGenerator.java
rename to libraries-2/src/main/java/com/baeldung/javapoet/PersonGenerator.java
index 17fe9002e847..43ab140e5149 100644
--- a/libraries/src/main/java/com/baeldung/javapoet/PersonGenerator.java
+++ b/libraries-2/src/main/java/com/baeldung/javapoet/PersonGenerator.java
@@ -176,6 +176,7 @@ public void generateStudentClass() throws IOException {
private void writeToOutputFile(String packageName, TypeSpec typeSpec) throws IOException {
JavaFile javaFile = JavaFile
.builder(packageName, typeSpec)
+ .skipJavaLangImports(true)
.indent(FOUR_WHITESPACES)
.build();
javaFile.writeTo(outputFile);
diff --git a/libraries-4/src/test/java/com/baeldung/javaparser/AnalyzeUnitTest.java b/libraries-2/src/test/java/com/baeldung/javaparser/AnalyzeUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/javaparser/AnalyzeUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/javaparser/AnalyzeUnitTest.java
index 28c938c80acc..105b5bcedcf8 100644
--- a/libraries-4/src/test/java/com/baeldung/javaparser/AnalyzeUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/javaparser/AnalyzeUnitTest.java
@@ -1,5 +1,13 @@
package com.baeldung.javaparser;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.ImportDeclaration;
@@ -9,13 +17,6 @@
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.visitor.GenericListVisitorAdapter;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
-import org.junit.jupiter.api.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
public class AnalyzeUnitTest {
private final String code = String.join("\n", Arrays.asList(
diff --git a/libraries-4/src/test/java/com/baeldung/javaparser/ManipulateUnitTest.java b/libraries-2/src/test/java/com/baeldung/javaparser/ManipulateUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/javaparser/ManipulateUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/javaparser/ManipulateUnitTest.java
index f7467b892aa6..2179f0644742 100644
--- a/libraries-4/src/test/java/com/baeldung/javaparser/ManipulateUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/javaparser/ManipulateUnitTest.java
@@ -1,14 +1,15 @@
package com.baeldung.javaparser;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Test;
+
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
-import org.junit.jupiter.api.Test;
-
-import java.util.Arrays;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
public class ManipulateUnitTest {
private final String code = String.join("\n", Arrays.asList(
diff --git a/libraries-4/src/test/java/com/baeldung/javaparser/OutputUnitTest.java b/libraries-2/src/test/java/com/baeldung/javaparser/OutputUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/javaparser/OutputUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/javaparser/OutputUnitTest.java
index 5128cc2204ed..0ef1615cd1c5 100644
--- a/libraries-4/src/test/java/com/baeldung/javaparser/OutputUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/javaparser/OutputUnitTest.java
@@ -1,16 +1,17 @@
package com.baeldung.javaparser;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Test;
+
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.printer.DefaultPrettyPrinterVisitor;
import com.github.javaparser.printer.configuration.DefaultConfigurationOption;
import com.github.javaparser.printer.configuration.DefaultPrinterConfiguration;
import com.github.javaparser.printer.configuration.Indentation;
-import org.junit.jupiter.api.Test;
-
-import java.util.Arrays;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
public class OutputUnitTest {
private final String code = String.join("\n", Arrays.asList(
diff --git a/libraries-4/src/test/java/com/baeldung/javaparser/ParseUnitTest.java b/libraries-2/src/test/java/com/baeldung/javaparser/ParseUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/javaparser/ParseUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/javaparser/ParseUnitTest.java
index 1a3dbc5a45bf..6ff6436dc811 100644
--- a/libraries-4/src/test/java/com/baeldung/javaparser/ParseUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/javaparser/ParseUnitTest.java
@@ -1,14 +1,15 @@
package com.baeldung.javaparser;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import org.junit.jupiter.api.Test;
+
import com.github.javaparser.ParseProblemException;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.stmt.Statement;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
public class ParseUnitTest {
@Test
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java b/libraries-2/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/person/Gender.java b/libraries-2/src/test/java/com/baeldung/javapoet/test/person/Gender.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javapoet/test/person/Gender.java
rename to libraries-2/src/test/java/com/baeldung/javapoet/test/person/Gender.java
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/person/Person.java b/libraries-2/src/test/java/com/baeldung/javapoet/test/person/Person.java
similarity index 88%
rename from libraries/src/test/java/com/baeldung/javapoet/test/person/Person.java
rename to libraries-2/src/test/java/com/baeldung/javapoet/test/person/Person.java
index fae8b2307572..64d9235f7c30 100644
--- a/libraries/src/test/java/com/baeldung/javapoet/test/person/Person.java
+++ b/libraries-2/src/test/java/com/baeldung/javapoet/test/person/Person.java
@@ -1,7 +1,5 @@
package com.baeldung.javapoet.test.person;
-import java.lang.String;
-
public interface Person {
String DEFAULT_NAME = "Alice";
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/person/Student.java b/libraries-2/src/test/java/com/baeldung/javapoet/test/person/Student.java
similarity index 94%
rename from libraries/src/test/java/com/baeldung/javapoet/test/person/Student.java
rename to libraries-2/src/test/java/com/baeldung/javapoet/test/person/Student.java
index 1c7d5cc09647..9511d552e409 100644
--- a/libraries/src/test/java/com/baeldung/javapoet/test/person/Student.java
+++ b/libraries-2/src/test/java/com/baeldung/javapoet/test/person/Student.java
@@ -1,7 +1,5 @@
package com.baeldung.javapoet.test.person;
-import java.lang.Override;
-import java.lang.String;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
diff --git a/libraries/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java b/libraries-2/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java
diff --git a/libraries-5/src/test/java/com/baeldung/sootup/AnalyzeUnitTest.java b/libraries-2/src/test/java/com/baeldung/sootup/AnalyzeUnitTest.java
similarity index 97%
rename from libraries-5/src/test/java/com/baeldung/sootup/AnalyzeUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/sootup/AnalyzeUnitTest.java
index 709269529bb3..6b7f09f349e7 100644
--- a/libraries-5/src/test/java/com/baeldung/sootup/AnalyzeUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/sootup/AnalyzeUnitTest.java
@@ -1,20 +1,20 @@
package com.baeldung.sootup;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
import org.junit.jupiter.api.Test;
+
import sootup.core.inputlocation.AnalysisInputLocation;
import sootup.java.bytecode.inputlocation.JavaClassPathAnalysisInputLocation;
import sootup.java.bytecode.inputlocation.JrtFileSystemAnalysisInputLocation;
import sootup.java.bytecode.inputlocation.OTFCompileAnalysisInputLocation;
import sootup.java.core.views.JavaView;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
public class AnalyzeUnitTest {
@Test
void whenAnalyzingTheJvm_thenWeCanListClasses() {
diff --git a/libraries-5/src/test/java/com/baeldung/sootup/ClassUnitTest.java b/libraries-2/src/test/java/com/baeldung/sootup/ClassUnitTest.java
similarity index 93%
rename from libraries-5/src/test/java/com/baeldung/sootup/ClassUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/sootup/ClassUnitTest.java
index ba7256df479d..a2e72f9ed16d 100644
--- a/libraries-5/src/test/java/com/baeldung/sootup/ClassUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/sootup/ClassUnitTest.java
@@ -1,6 +1,15 @@
package com.baeldung.sootup;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.file.Path;
+import java.util.Optional;
+import java.util.Set;
+
import org.junit.jupiter.api.Test;
+
import sootup.core.IdentifierFactory;
import sootup.core.inputlocation.AnalysisInputLocation;
import sootup.core.model.SootClass;
@@ -9,12 +18,6 @@
import sootup.java.core.JavaSootClass;
import sootup.java.core.views.JavaView;
-import java.nio.file.Path;
-import java.util.Optional;
-import java.util.Set;
-
-import static org.junit.jupiter.api.Assertions.*;
-
public class ClassUnitTest {
@Test
void whenAnalyzingThisTestClass_thenWeCanGetASingleClass() {
diff --git a/libraries-5/src/test/java/com/baeldung/sootup/FieldUnitTest.java b/libraries-2/src/test/java/com/baeldung/sootup/FieldUnitTest.java
similarity index 91%
rename from libraries-5/src/test/java/com/baeldung/sootup/FieldUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/sootup/FieldUnitTest.java
index 310292b35847..296999d2df78 100644
--- a/libraries-5/src/test/java/com/baeldung/sootup/FieldUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/sootup/FieldUnitTest.java
@@ -1,6 +1,15 @@
package com.baeldung.sootup;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.file.Path;
+import java.util.Optional;
+import java.util.Set;
+
import org.junit.jupiter.api.Test;
+
import sootup.core.IdentifierFactory;
import sootup.core.inputlocation.AnalysisInputLocation;
import sootup.core.model.SootClass;
@@ -9,12 +18,6 @@
import sootup.java.bytecode.inputlocation.OTFCompileAnalysisInputLocation;
import sootup.java.core.views.JavaView;
-import java.nio.file.Path;
-import java.util.Optional;
-import java.util.Set;
-
-import static org.junit.jupiter.api.Assertions.*;
-
public class FieldUnitTest {
private String aField;
diff --git a/libraries-5/src/test/java/com/baeldung/sootup/MethodBodyUnitTest.java b/libraries-2/src/test/java/com/baeldung/sootup/MethodBodyUnitTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/sootup/MethodBodyUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/sootup/MethodBodyUnitTest.java
index 079523e46986..9ce84a8bfaa0 100644
--- a/libraries-5/src/test/java/com/baeldung/sootup/MethodBodyUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/sootup/MethodBodyUnitTest.java
@@ -1,6 +1,15 @@
package com.baeldung.sootup;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Optional;
+
import org.junit.jupiter.api.Test;
+
import sootup.core.IdentifierFactory;
import sootup.core.graph.StmtGraph;
import sootup.core.inputlocation.AnalysisInputLocation;
@@ -12,14 +21,6 @@
import sootup.java.bytecode.inputlocation.OTFCompileAnalysisInputLocation;
import sootup.java.core.views.JavaView;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Optional;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
public class MethodBodyUnitTest {
@Test
void whenAnalyzingAMethod_thenWeCanAccessTheLocals() {
diff --git a/libraries-5/src/test/java/com/baeldung/sootup/MethodUnitTest.java b/libraries-2/src/test/java/com/baeldung/sootup/MethodUnitTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/sootup/MethodUnitTest.java
rename to libraries-2/src/test/java/com/baeldung/sootup/MethodUnitTest.java
index c04f635854db..e301fa7dfdb8 100644
--- a/libraries-5/src/test/java/com/baeldung/sootup/MethodUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/sootup/MethodUnitTest.java
@@ -1,6 +1,16 @@
package com.baeldung.sootup;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
import org.junit.jupiter.api.Test;
+
import sootup.core.IdentifierFactory;
import sootup.core.inputlocation.AnalysisInputLocation;
import sootup.core.model.SootClass;
@@ -9,15 +19,6 @@
import sootup.java.bytecode.inputlocation.OTFCompileAnalysisInputLocation;
import sootup.java.core.views.JavaView;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
public class MethodUnitTest {
@Test
diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml
index 0091997ae713..dded3d5b7e21 100644
--- a/libraries-3/pom.xml
+++ b/libraries-3/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
libraries-3
libraries-3
@@ -14,20 +14,40 @@
- org.projectlombok
- lombok
- ${lombok.version}
+ org.springframework.boot
+ spring-boot-starter
+ ${spring-boot.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+ ${spring-boot.version}
- com.jcabi
- jcabi-aspects
- ${jcabi-aspects.version}
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring-boot.version}
+ test
- org.aspectj
- aspectjrt
- ${aspectjrt.version}
- runtime
+ nl.basjes.parse.useragent
+ yauaa
+ ${yauaa.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
org.apache.velocity
@@ -81,14 +101,35 @@
${javax.annotation-api.version}
- io.atlassian.fugue
- fugue
- ${fugue.version}
+ org.javers
+ javers-core
+ ${javers.version}
+
+
+ org.agrona
+ agrona
+ ${agrona.version}
+
+
+ io.nats
+ jnats
+ ${jnats.version}
- org.jooq
- jool
- ${jool.version}
+ org.awaitility
+ awaitility
+ ${awaitility.version}
+ test
+
+
+ org.jfree
+ jfreechart
+ ${jfreechart.version}
+
+
+ dev.failsafe
+ failsafe
+ ${dev.failsafe.version}
@@ -96,32 +137,62 @@
libraries-3
- com.jcabi
- jcabi-maven-plugin
- ${jcabi-maven-plugin.version}
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ ${exec-maven-plugin.version}
+ generate-sources
- ajc
+ java
+
+ false
+ true
+ uk.co.real_logic.sbe.SbeTool
+
+
+ sbe.output.dir
+ ${project.build.directory}/generated-sources/java
+
+
+
+ ${project.basedir}/src/main/resources/schema.xml
+
+ ${project.build.directory}/generated-sources/java
+
- org.aspectj
- aspectjtools
- ${aspectjtools.version}
-
-
- org.aspectj
- aspectjweaver
- ${aspectjweaver.version}
+ uk.co.real-logic
+ sbe-tool
+ ${sbe-tool.version}
- org.apache.maven.plugins
- maven-compiler-plugin
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ ${build-helper-maven-plugin.version}
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+ ${project.build.directory}/generated-sources/java/
+
+
+
+
@@ -133,19 +204,23 @@
- 0.26.0
- 1.9.20.1
- 0.14.1
- 1.9.20.1
- 1.9.20.1
2.2
0.3.0
2.8
2.1.3
1.0.0
1.3.2
- 4.5.1
- 0.9.12
+ 3.1.0
+ 1.27.0
+ 1.17.1
+ 3.0.0
+ 2.17.3
+ 4.2.1
+ 1.5.4
+ 3.3.2
+ 3.3.0
+ 6.1.8
+ 7.28.1
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/javers/Address.java b/libraries-3/src/main/java/com/baeldung/javers/Address.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/javers/Address.java
rename to libraries-3/src/main/java/com/baeldung/javers/Address.java
diff --git a/libraries/src/main/java/com/baeldung/javers/Person.java b/libraries-3/src/main/java/com/baeldung/javers/Person.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/javers/Person.java
rename to libraries-3/src/main/java/com/baeldung/javers/Person.java
diff --git a/libraries/src/main/java/com/baeldung/javers/PersonWithAddress.java b/libraries-3/src/main/java/com/baeldung/javers/PersonWithAddress.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/javers/PersonWithAddress.java
rename to libraries-3/src/main/java/com/baeldung/javers/PersonWithAddress.java
diff --git a/libraries-4/src/main/java/com/baeldung/jfreechart/BarChartExample.java b/libraries-3/src/main/java/com/baeldung/jfreechart/BarChartExample.java
similarity index 97%
rename from libraries-4/src/main/java/com/baeldung/jfreechart/BarChartExample.java
rename to libraries-3/src/main/java/com/baeldung/jfreechart/BarChartExample.java
index 9005746b63c6..4ba0b87da75c 100644
--- a/libraries-4/src/main/java/com/baeldung/jfreechart/BarChartExample.java
+++ b/libraries-3/src/main/java/com/baeldung/jfreechart/BarChartExample.java
@@ -1,6 +1,6 @@
package com.baeldung.jfreechart;
-import javax.swing.JFrame;
+import javax.swing.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
diff --git a/libraries-4/src/main/java/com/baeldung/jfreechart/CombinationChartExample.java b/libraries-3/src/main/java/com/baeldung/jfreechart/CombinationChartExample.java
similarity index 97%
rename from libraries-4/src/main/java/com/baeldung/jfreechart/CombinationChartExample.java
rename to libraries-3/src/main/java/com/baeldung/jfreechart/CombinationChartExample.java
index 4143814ba9ba..8cca3bfe29f6 100644
--- a/libraries-4/src/main/java/com/baeldung/jfreechart/CombinationChartExample.java
+++ b/libraries-3/src/main/java/com/baeldung/jfreechart/CombinationChartExample.java
@@ -1,8 +1,6 @@
package com.baeldung.jfreechart;
-import java.awt.Font;
-
-import javax.swing.JFrame;
+import javax.swing.*;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
diff --git a/libraries-4/src/main/java/com/baeldung/jfreechart/LineChartExample.java b/libraries-3/src/main/java/com/baeldung/jfreechart/LineChartExample.java
similarity index 97%
rename from libraries-4/src/main/java/com/baeldung/jfreechart/LineChartExample.java
rename to libraries-3/src/main/java/com/baeldung/jfreechart/LineChartExample.java
index 795a65f841cf..6be6db7ad367 100644
--- a/libraries-4/src/main/java/com/baeldung/jfreechart/LineChartExample.java
+++ b/libraries-3/src/main/java/com/baeldung/jfreechart/LineChartExample.java
@@ -1,6 +1,6 @@
package com.baeldung.jfreechart;
-import javax.swing.JFrame;
+import javax.swing.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
diff --git a/libraries-4/src/main/java/com/baeldung/jfreechart/PieChartExample.java b/libraries-3/src/main/java/com/baeldung/jfreechart/PieChartExample.java
similarity index 97%
rename from libraries-4/src/main/java/com/baeldung/jfreechart/PieChartExample.java
rename to libraries-3/src/main/java/com/baeldung/jfreechart/PieChartExample.java
index ed0cff99c8a4..52f7150753f7 100644
--- a/libraries-4/src/main/java/com/baeldung/jfreechart/PieChartExample.java
+++ b/libraries-3/src/main/java/com/baeldung/jfreechart/PieChartExample.java
@@ -1,6 +1,6 @@
package com.baeldung.jfreechart;
-import javax.swing.JFrame;
+import javax.swing.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
diff --git a/libraries-4/src/main/java/com/baeldung/jfreechart/TimeSeriesChartExample.java b/libraries-3/src/main/java/com/baeldung/jfreechart/TimeSeriesChartExample.java
similarity index 98%
rename from libraries-4/src/main/java/com/baeldung/jfreechart/TimeSeriesChartExample.java
rename to libraries-3/src/main/java/com/baeldung/jfreechart/TimeSeriesChartExample.java
index 60339823e7c0..898ab2bafc9e 100644
--- a/libraries-4/src/main/java/com/baeldung/jfreechart/TimeSeriesChartExample.java
+++ b/libraries-3/src/main/java/com/baeldung/jfreechart/TimeSeriesChartExample.java
@@ -1,6 +1,6 @@
package com.baeldung.jfreechart;
-import javax.swing.JFrame;
+import javax.swing.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
diff --git a/libraries/src/main/java/com/baeldung/sbe/MarketData.java b/libraries-3/src/main/java/com/baeldung/sbe/MarketData.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/sbe/MarketData.java
rename to libraries-3/src/main/java/com/baeldung/sbe/MarketData.java
diff --git a/libraries/src/main/java/com/baeldung/sbe/MarketDataSource.java b/libraries-3/src/main/java/com/baeldung/sbe/MarketDataSource.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/sbe/MarketDataSource.java
rename to libraries-3/src/main/java/com/baeldung/sbe/MarketDataSource.java
diff --git a/libraries/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java b/libraries-3/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java
rename to libraries-3/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java
diff --git a/libraries/src/main/java/com/baeldung/sbe/MarketDataUtil.java b/libraries-3/src/main/java/com/baeldung/sbe/MarketDataUtil.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/sbe/MarketDataUtil.java
rename to libraries-3/src/main/java/com/baeldung/sbe/MarketDataUtil.java
diff --git a/libraries-5/src/main/java/com/baeldung/yauaa/Application.java b/libraries-3/src/main/java/com/baeldung/yauaa/Application.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/yauaa/Application.java
rename to libraries-3/src/main/java/com/baeldung/yauaa/Application.java
diff --git a/libraries-5/src/main/java/com/baeldung/yauaa/HomePageController.java b/libraries-3/src/main/java/com/baeldung/yauaa/HomePageController.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/yauaa/HomePageController.java
rename to libraries-3/src/main/java/com/baeldung/yauaa/HomePageController.java
diff --git a/libraries-5/src/main/java/com/baeldung/yauaa/UserAgentAnalyzerConfiguration.java b/libraries-3/src/main/java/com/baeldung/yauaa/UserAgentAnalyzerConfiguration.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/yauaa/UserAgentAnalyzerConfiguration.java
rename to libraries-3/src/main/java/com/baeldung/yauaa/UserAgentAnalyzerConfiguration.java
diff --git a/libraries-5/src/main/java/com/baeldung/yauaa/UserAgentAttributeLoggingFilter.java b/libraries-3/src/main/java/com/baeldung/yauaa/UserAgentAttributeLoggingFilter.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/yauaa/UserAgentAttributeLoggingFilter.java
rename to libraries-3/src/main/java/com/baeldung/yauaa/UserAgentAttributeLoggingFilter.java
diff --git a/libraries/src/main/resources/schema.xml b/libraries-3/src/main/resources/schema.xml
similarity index 100%
rename from libraries/src/main/resources/schema.xml
rename to libraries-3/src/main/resources/schema.xml
diff --git a/libraries-5/src/main/resources/templates/error/open-in-mobile.html b/libraries-3/src/main/resources/templates/error/open-in-mobile.html
similarity index 100%
rename from libraries-5/src/main/resources/templates/error/open-in-mobile.html
rename to libraries-3/src/main/resources/templates/error/open-in-mobile.html
diff --git a/libraries-5/src/main/resources/templates/mobile-home.html b/libraries-3/src/main/resources/templates/mobile-home.html
similarity index 100%
rename from libraries-5/src/main/resources/templates/mobile-home.html
rename to libraries-3/src/main/resources/templates/mobile-home.html
diff --git a/libraries-4/src/test/java/com/baeldung/failsafe/BulkheadUnitTest.java b/libraries-3/src/test/java/com/baeldung/failsafe/BulkheadUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/failsafe/BulkheadUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/failsafe/BulkheadUnitTest.java
index b41cd4ddfa57..eb16f3e38de2 100644
--- a/libraries-4/src/test/java/com/baeldung/failsafe/BulkheadUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/failsafe/BulkheadUnitTest.java
@@ -1,16 +1,17 @@
package com.baeldung.failsafe;
-import dev.failsafe.Bulkhead;
-import dev.failsafe.BulkheadFullException;
-import dev.failsafe.Failsafe;
-import org.junit.jupiter.api.Test;
-
-import java.time.Duration;
-
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import java.time.Duration;
+
+import org.junit.jupiter.api.Test;
+
+import dev.failsafe.Bulkhead;
+import dev.failsafe.BulkheadFullException;
+import dev.failsafe.Failsafe;
+
public class BulkheadUnitTest {
@Test
void rejectExcessCalls() throws InterruptedException {
diff --git a/libraries-4/src/test/java/com/baeldung/failsafe/CircuitBreakerUnitTest.java b/libraries-3/src/test/java/com/baeldung/failsafe/CircuitBreakerUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/failsafe/CircuitBreakerUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/failsafe/CircuitBreakerUnitTest.java
index 213db509fae9..039e4131fc5c 100644
--- a/libraries-4/src/test/java/com/baeldung/failsafe/CircuitBreakerUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/failsafe/CircuitBreakerUnitTest.java
@@ -1,11 +1,12 @@
package com.baeldung.failsafe;
+import java.time.Duration;
+
+import org.junit.jupiter.api.Test;
+
import dev.failsafe.CircuitBreaker;
import dev.failsafe.Failsafe;
import dev.failsafe.FailsafeExecutor;
-import org.junit.jupiter.api.Test;
-
-import java.time.Duration;
public class CircuitBreakerUnitTest {
@Test
diff --git a/libraries-4/src/test/java/com/baeldung/failsafe/FallbackUnitTest.java b/libraries-3/src/test/java/com/baeldung/failsafe/FallbackUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/failsafe/FallbackUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/failsafe/FallbackUnitTest.java
index bd13c5891ff8..3210b8bd4dc5 100644
--- a/libraries-4/src/test/java/com/baeldung/failsafe/FallbackUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/failsafe/FallbackUnitTest.java
@@ -1,13 +1,14 @@
package com.baeldung.failsafe;
-import dev.failsafe.Failsafe;
-import dev.failsafe.FailsafeExecutor;
-import dev.failsafe.Fallback;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.IOException;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
+
+import dev.failsafe.Failsafe;
+import dev.failsafe.FailsafeExecutor;
+import dev.failsafe.Fallback;
public class FallbackUnitTest {
@Test
diff --git a/libraries-4/src/test/java/com/baeldung/failsafe/RateLimiterUnitTest.java b/libraries-3/src/test/java/com/baeldung/failsafe/RateLimiterUnitTest.java
similarity index 94%
rename from libraries-4/src/test/java/com/baeldung/failsafe/RateLimiterUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/failsafe/RateLimiterUnitTest.java
index b7b03fce1f0e..8a6d6f33ec99 100644
--- a/libraries-4/src/test/java/com/baeldung/failsafe/RateLimiterUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/failsafe/RateLimiterUnitTest.java
@@ -1,12 +1,16 @@
package com.baeldung.failsafe;
-import dev.failsafe.*;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.time.Duration;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import org.junit.jupiter.api.Test;
+
+import dev.failsafe.Failsafe;
+import dev.failsafe.FailsafeExecutor;
+import dev.failsafe.RateLimitExceededException;
+import dev.failsafe.RateLimiter;
public class RateLimiterUnitTest {
@Test
diff --git a/libraries-4/src/test/java/com/baeldung/failsafe/RetryUnitTest.java b/libraries-3/src/test/java/com/baeldung/failsafe/RetryUnitTest.java
similarity index 94%
rename from libraries-4/src/test/java/com/baeldung/failsafe/RetryUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/failsafe/RetryUnitTest.java
index 44a5940a41e9..b58936ec6712 100644
--- a/libraries-4/src/test/java/com/baeldung/failsafe/RetryUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/failsafe/RetryUnitTest.java
@@ -1,15 +1,18 @@
package com.baeldung.failsafe;
-import dev.failsafe.Failsafe;
-import dev.failsafe.FailsafeException;
-import dev.failsafe.RetryPolicy;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.IOException;
import java.time.Duration;
import java.util.concurrent.atomic.AtomicInteger;
-import static org.junit.jupiter.api.Assertions.*;
+import org.junit.jupiter.api.Test;
+
+import dev.failsafe.Failsafe;
+import dev.failsafe.FailsafeException;
+import dev.failsafe.RetryPolicy;
public class RetryUnitTest {
@Test
diff --git a/libraries-4/src/test/java/com/baeldung/failsafe/TimeoutUnitTest.java b/libraries-3/src/test/java/com/baeldung/failsafe/TimeoutUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/failsafe/TimeoutUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/failsafe/TimeoutUnitTest.java
index 76b8c4d78c8e..07dd07e3853f 100644
--- a/libraries-4/src/test/java/com/baeldung/failsafe/TimeoutUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/failsafe/TimeoutUnitTest.java
@@ -1,14 +1,15 @@
package com.baeldung.failsafe;
-import dev.failsafe.Failsafe;
-import dev.failsafe.FailsafeException;
-import dev.failsafe.Timeout;
-import org.junit.jupiter.api.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.time.Duration;
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import org.junit.jupiter.api.Test;
+
+import dev.failsafe.Failsafe;
+import dev.failsafe.FailsafeException;
+import dev.failsafe.Timeout;
public class TimeoutUnitTest {
@Test
diff --git a/libraries/src/test/java/com/baeldung/javers/JaversUnitTest.java b/libraries-3/src/test/java/com/baeldung/javers/JaversUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javers/JaversUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/javers/JaversUnitTest.java
index a8a7df659b6b..1a4553957447 100644
--- a/libraries/src/test/java/com/baeldung/javers/JaversUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/javers/JaversUnitTest.java
@@ -1,5 +1,11 @@
package com.baeldung.javers;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
import org.javers.common.collections.Lists;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
@@ -10,12 +16,6 @@
import org.javers.core.diff.changetype.container.ListChange;
import org.junit.Test;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
public class JaversUnitTest {
@Test
diff --git a/libraries-2/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java b/libraries-3/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java
rename to libraries-3/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java
diff --git a/libraries/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java b/libraries-3/src/test/java/com/baeldung/sbe/test/EncodeDecodeMarketDataUnitTest.java
similarity index 98%
rename from libraries/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java
rename to libraries-3/src/test/java/com/baeldung/sbe/test/EncodeDecodeMarketDataUnitTest.java
index 5c6c5118a9fc..2c6836c39957 100644
--- a/libraries/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java
+++ b/libraries-3/src/test/java/com/baeldung/sbe/test/EncodeDecodeMarketDataUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.test;
+package com.baeldung.sbe.test;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
diff --git a/libraries-5/src/test/java/com/baeldung/yauaa/HomePageControllerIntegrationTest.java b/libraries-3/src/test/java/com/baeldung/yauaa/HomePageControllerIntegrationTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/yauaa/HomePageControllerIntegrationTest.java
rename to libraries-3/src/test/java/com/baeldung/yauaa/HomePageControllerIntegrationTest.java
diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml
index ee8ddbc09986..af690b085438 100644
--- a/libraries-4/pom.xml
+++ b/libraries-4/pom.xml
@@ -12,26 +12,11 @@
-
- org.jdeferred
- jdeferred-core
- ${jdeferred.version}
-
org.olap4j
olap4j
${olap4j.version}
-
- net.engio
- mbassador
- ${mbassador.version}
-
-
- com.machinezoo.noexception
- noexception
- ${noexception.version}
-
org.springframework
spring-web
@@ -58,16 +43,6 @@
streamex
${streamex.version}
-
- javax.el
- javax.el-api
- ${javax.el.version}
-
-
- org.glassfish.web
- javax.el
- ${glassfish.web.version}
-
com.fasterxml.jackson.core
jackson-core
@@ -83,21 +58,6 @@
commons-lang3
${commons-lang3.version}
-
- org.jfree
- jfreechart
- ${jfreechart.version}
-
-
- com.github.javaparser
- javaparser-core
- ${javaparser.version}
-
-
- dev.failsafe
- failsafe
- ${dev.failsafe.version}
-
io.aeron
aeron-all
@@ -108,28 +68,55 @@
oshi-core
${oshi.version}
-
+
+ io.github.classgraph
+ classgraph
+ ${classgraph.version}
+
+
+ org.mapdb
+ mapdb
+ ${mapdb.version}
+
+
+ edu.uci.ics
+ crawler4j
+ ${crawler4j.version}
+
+
+ com.sleepycat
+ je
+
+
+
+
+ com.googlecode.lanterna
+ lanterna
+ ${lanterna.version}
+
+
+ org.kohsuke
+ github-api
+ ${github-api.version}
+
2.14.2
2.14.2
- 1.2.6
- 1.1.0
- 1.3.1
4.3.8.RELEASE
2.5
3.2.0-m7
3.0.0
0.6.5
- 3.0.0
- 2.2.4
1.2.0
- 1.5.4
- 3.25.10
- 3.3.2
1.44.1
6.7.1
+ 3.0.8
+ 4.8.153
+ 4.4.0
+ 3.1.2
+ 1.327
diff --git a/libraries-2/src/main/java/com/baeldung/crawler4j/CrawlerStatistics.java b/libraries-4/src/main/java/com/baeldung/crawler4j/CrawlerStatistics.java
similarity index 100%
rename from libraries-2/src/main/java/com/baeldung/crawler4j/CrawlerStatistics.java
rename to libraries-4/src/main/java/com/baeldung/crawler4j/CrawlerStatistics.java
diff --git a/libraries-2/src/main/java/com/baeldung/crawler4j/HtmlCrawler.java b/libraries-4/src/main/java/com/baeldung/crawler4j/HtmlCrawler.java
similarity index 100%
rename from libraries-2/src/main/java/com/baeldung/crawler4j/HtmlCrawler.java
rename to libraries-4/src/main/java/com/baeldung/crawler4j/HtmlCrawler.java
diff --git a/libraries-2/src/main/java/com/baeldung/crawler4j/HtmlCrawlerController.java b/libraries-4/src/main/java/com/baeldung/crawler4j/HtmlCrawlerController.java
similarity index 100%
rename from libraries-2/src/main/java/com/baeldung/crawler4j/HtmlCrawlerController.java
rename to libraries-4/src/main/java/com/baeldung/crawler4j/HtmlCrawlerController.java
diff --git a/libraries-2/src/main/java/com/baeldung/crawler4j/ImageCrawler.java b/libraries-4/src/main/java/com/baeldung/crawler4j/ImageCrawler.java
similarity index 100%
rename from libraries-2/src/main/java/com/baeldung/crawler4j/ImageCrawler.java
rename to libraries-4/src/main/java/com/baeldung/crawler4j/ImageCrawler.java
diff --git a/libraries-2/src/main/java/com/baeldung/crawler4j/ImageCrawlerController.java b/libraries-4/src/main/java/com/baeldung/crawler4j/ImageCrawlerController.java
similarity index 100%
rename from libraries-2/src/main/java/com/baeldung/crawler4j/ImageCrawlerController.java
rename to libraries-4/src/main/java/com/baeldung/crawler4j/ImageCrawlerController.java
diff --git a/libraries-2/src/main/java/com/baeldung/crawler4j/MultipleCrawlerController.java b/libraries-4/src/main/java/com/baeldung/crawler4j/MultipleCrawlerController.java
similarity index 100%
rename from libraries-2/src/main/java/com/baeldung/crawler4j/MultipleCrawlerController.java
rename to libraries-4/src/main/java/com/baeldung/crawler4j/MultipleCrawlerController.java
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/ClassGraphUnitTest.java b/libraries-4/src/test/java/com/baeldung/classgraph/ClassGraphUnitTest.java
similarity index 91%
rename from libraries-2/src/test/java/com/baeldung/classgraph/ClassGraphUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/ClassGraphUnitTest.java
index 3dc99e6a3288..a05abe39683c 100644
--- a/libraries-2/src/test/java/com/baeldung/classgraph/ClassGraphUnitTest.java
+++ b/libraries-4/src/test/java/com/baeldung/classgraph/ClassGraphUnitTest.java
@@ -1,12 +1,19 @@
package com.baeldung.classgraph;
-import io.github.classgraph.*;
-import org.junit.Test;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.util.function.Consumer;
-import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Test;
+
+import io.github.classgraph.AnnotationInfo;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfo;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.Resource;
+import io.github.classgraph.ResourceList;
+import io.github.classgraph.ScanResult;
public class ClassGraphUnitTest {
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/ClassWithAnnotation.java b/libraries-4/src/test/java/com/baeldung/classgraph/ClassWithAnnotation.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/classgraph/ClassWithAnnotation.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/ClassWithAnnotation.java
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/FieldWithAnnotation.java b/libraries-4/src/test/java/com/baeldung/classgraph/FieldWithAnnotation.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/classgraph/FieldWithAnnotation.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/FieldWithAnnotation.java
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/MethodWithAnnotation.java b/libraries-4/src/test/java/com/baeldung/classgraph/MethodWithAnnotation.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/classgraph/MethodWithAnnotation.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/MethodWithAnnotation.java
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterDao.java b/libraries-4/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterDao.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterDao.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterDao.java
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterWeb.java b/libraries-4/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterWeb.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterWeb.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/MethodWithAnnotationParameterWeb.java
diff --git a/libraries-2/src/test/java/com/baeldung/classgraph/TestAnnotation.java b/libraries-4/src/test/java/com/baeldung/classgraph/TestAnnotation.java
similarity index 64%
rename from libraries-2/src/test/java/com/baeldung/classgraph/TestAnnotation.java
rename to libraries-4/src/test/java/com/baeldung/classgraph/TestAnnotation.java
index e3f5df92ed5c..d4b10e479c70 100644
--- a/libraries-2/src/test/java/com/baeldung/classgraph/TestAnnotation.java
+++ b/libraries-4/src/test/java/com/baeldung/classgraph/TestAnnotation.java
@@ -1,11 +1,13 @@
package com.baeldung.classgraph;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import static java.lang.annotation.ElementType.*;
-
@Target({TYPE, METHOD, FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java b/libraries-4/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
index 296ba5bbe67a..ff782596afae 100644
--- a/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
@@ -1,12 +1,12 @@
package com.baeldung.githubapi;
-import org.junit.jupiter.api.Test;
-import org.kohsuke.github.GitHub;
-import org.kohsuke.github.GitHubBuilder;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.IOException;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
+import org.kohsuke.github.GitHub;
+import org.kohsuke.github.GitHubBuilder;
public class ClientLiveTest {
diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java b/libraries-4/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
similarity index 94%
rename from libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
index ae9e343bf0e0..774eaadf6dc5 100644
--- a/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
@@ -1,19 +1,25 @@
package com.baeldung.githubapi;
-import com.google.common.base.Charsets;
-import org.apache.commons.io.IOUtils;
-import org.junit.jupiter.api.Test;
-import org.kohsuke.github.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.apache.commons.io.IOUtils;
+import org.junit.jupiter.api.Test;
+import org.kohsuke.github.GHBranch;
+import org.kohsuke.github.GHCommit;
+import org.kohsuke.github.GHContent;
+import org.kohsuke.github.GHRepository;
+import org.kohsuke.github.GHUser;
+import org.kohsuke.github.GitHub;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Charsets;
public class RepositoryLiveTest {
private static final Logger LOG = LoggerFactory.getLogger(RepositoryLiveTest.class);
diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java b/libraries-4/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
index 6be1275343cf..845e76890ac7 100644
--- a/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
@@ -1,5 +1,9 @@
package com.baeldung.githubapi;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+
import org.junit.jupiter.api.Test;
import org.kohsuke.github.GHMyself;
import org.kohsuke.github.GHUser;
@@ -7,10 +11,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
public class UsersLiveTest {
private static final Logger LOG = LoggerFactory.getLogger(UsersLiveTest.class);
diff --git a/libraries-5/src/test/java/com/baeldung/lanterna/GuiLiveTest.java b/libraries-4/src/test/java/com/baeldung/lanterna/GuiLiveTest.java
similarity index 92%
rename from libraries-5/src/test/java/com/baeldung/lanterna/GuiLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/lanterna/GuiLiveTest.java
index be3db5f90599..1794119eb8a4 100644
--- a/libraries-5/src/test/java/com/baeldung/lanterna/GuiLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/lanterna/GuiLiveTest.java
@@ -1,13 +1,22 @@
package com.baeldung.lanterna;
-import com.googlecode.lanterna.gui2.*;
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
+
+import com.googlecode.lanterna.gui2.BasicWindow;
+import com.googlecode.lanterna.gui2.Button;
+import com.googlecode.lanterna.gui2.Direction;
+import com.googlecode.lanterna.gui2.Label;
+import com.googlecode.lanterna.gui2.LinearLayout;
+import com.googlecode.lanterna.gui2.MultiWindowTextGUI;
+import com.googlecode.lanterna.gui2.Panel;
+import com.googlecode.lanterna.gui2.TextBox;
+import com.googlecode.lanterna.gui2.Window;
import com.googlecode.lanterna.gui2.dialogs.MessageDialogBuilder;
import com.googlecode.lanterna.screen.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.Terminal;
-import org.junit.jupiter.api.Test;
-
-import java.util.Set;
public class GuiLiveTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/lanterna/LowLevelLiveTest.java b/libraries-4/src/test/java/com/baeldung/lanterna/LowLevelLiveTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/lanterna/LowLevelLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/lanterna/LowLevelLiveTest.java
index 805642c4753e..f0199bd688a6 100644
--- a/libraries-5/src/test/java/com/baeldung/lanterna/LowLevelLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/lanterna/LowLevelLiveTest.java
@@ -1,11 +1,12 @@
package com.baeldung.lanterna;
+import org.junit.jupiter.api.Test;
+
import com.googlecode.lanterna.SGR;
import com.googlecode.lanterna.TextColor;
import com.googlecode.lanterna.input.KeyType;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.Terminal;
-import org.junit.jupiter.api.Test;
public class LowLevelLiveTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/lanterna/ScreenLiveTest.java b/libraries-4/src/test/java/com/baeldung/lanterna/ScreenLiveTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/lanterna/ScreenLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/lanterna/ScreenLiveTest.java
index 04326b52d1f2..5512af73bd73 100644
--- a/libraries-5/src/test/java/com/baeldung/lanterna/ScreenLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/lanterna/ScreenLiveTest.java
@@ -1,5 +1,7 @@
package com.baeldung.lanterna;
+import org.junit.jupiter.api.Test;
+
import com.googlecode.lanterna.SGR;
import com.googlecode.lanterna.TextCharacter;
import com.googlecode.lanterna.TextColor;
@@ -7,7 +9,6 @@
import com.googlecode.lanterna.screen.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.Terminal;
-import org.junit.jupiter.api.Test;
public class ScreenLiveTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/lanterna/TerminalLiveTest.java b/libraries-4/src/test/java/com/baeldung/lanterna/TerminalLiveTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/lanterna/TerminalLiveTest.java
rename to libraries-4/src/test/java/com/baeldung/lanterna/TerminalLiveTest.java
index ff04ac16ea0b..6a41e35efbb9 100644
--- a/libraries-5/src/test/java/com/baeldung/lanterna/TerminalLiveTest.java
+++ b/libraries-4/src/test/java/com/baeldung/lanterna/TerminalLiveTest.java
@@ -1,8 +1,9 @@
package com.baeldung.lanterna;
+import org.junit.jupiter.api.Test;
+
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.Terminal;
-import org.junit.jupiter.api.Test;
public class TerminalLiveTest {
@Test
diff --git a/libraries-2/src/test/java/com/baeldung/mapdb/CollectionsUnitTest.java b/libraries-4/src/test/java/com/baeldung/mapdb/CollectionsUnitTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/mapdb/CollectionsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mapdb/CollectionsUnitTest.java
diff --git a/libraries-2/src/test/java/com/baeldung/mapdb/HTreeMapUnitTest.java b/libraries-4/src/test/java/com/baeldung/mapdb/HTreeMapUnitTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/mapdb/HTreeMapUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mapdb/HTreeMapUnitTest.java
diff --git a/libraries-2/src/test/java/com/baeldung/mapdb/HelloBaeldungUnitTest.java b/libraries-4/src/test/java/com/baeldung/mapdb/HelloBaeldungUnitTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/mapdb/HelloBaeldungUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mapdb/HelloBaeldungUnitTest.java
diff --git a/libraries-2/src/test/java/com/baeldung/mapdb/InMemoryModesUnitTest.java b/libraries-4/src/test/java/com/baeldung/mapdb/InMemoryModesUnitTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/mapdb/InMemoryModesUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mapdb/InMemoryModesUnitTest.java
diff --git a/libraries-2/src/test/java/com/baeldung/mapdb/SortedTableMapUnitTest.java b/libraries-4/src/test/java/com/baeldung/mapdb/SortedTableMapUnitTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/mapdb/SortedTableMapUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mapdb/SortedTableMapUnitTest.java
diff --git a/libraries-2/src/test/java/com/baeldung/mapdb/TransactionsUnitTest.java b/libraries-4/src/test/java/com/baeldung/mapdb/TransactionsUnitTest.java
similarity index 100%
rename from libraries-2/src/test/java/com/baeldung/mapdb/TransactionsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mapdb/TransactionsUnitTest.java
diff --git a/libraries-2/src/test/resources/classgraph/my.config b/libraries-4/src/test/resources/classgraph/my.config
similarity index 100%
rename from libraries-2/src/test/resources/classgraph/my.config
rename to libraries-4/src/test/resources/classgraph/my.config
diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml
index 7ef64648eaf2..648b24f19336 100644
--- a/libraries-5/pom.xml
+++ b/libraries-5/pom.xml
@@ -11,61 +11,7 @@
1.0.0-SNAPSHOT
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 17
- 17
-
- -Xplugin:Manifold
-
-
-
- systems.manifold
- manifold-json
- ${manifold.version}
-
-
- am.ik.yavi
- yavi
- ${yavi.version}
-
-
-
-
-
-
-
-
- io.activej
- activej-http
- ${activej.version}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson-databind.version}
-
-
- io.activej
- activej-inject
- ${activej.version}
-
-
- io.activej
- activej-promise
- ${activej.version}
-
-
- io.activej
- activej-test
- ${activej.version}
- test
-
com.alicp.jetcache
jetcache-core
@@ -81,7 +27,6 @@
jetcache-autoconfigure
${jetcache.version}
-
org.springframework.boot
spring-boot-starter
@@ -102,62 +47,6 @@
spring-boot-starter-thymeleaf
${spring-boot.version}
-
-
- systems.manifold
- manifold-json-rt
- ${manifold.version}
-
-
- systems.manifold
- manifold-csv-rt
- ${manifold.version}
-
-
- systems.manifold
- manifold-xml-rt
- ${manifold.version}
-
-
- systems.manifold
- manifold-yaml-rt
- ${manifold.version}
-
-
- nl.basjes.parse.useragent
- yauaa
- ${yauaa.version}
-
-
- am.ik.yavi
- yavi
- ${yavi.version}
-
-
- com.googlecode.lanterna
- lanterna
- ${lanterna.version}
-
-
- org.soot-oss
- sootup.core
- ${sootup.version}
-
-
- org.soot-oss
- sootup.java.core
- ${sootup.version}
-
-
- org.soot-oss
- sootup.java.sourcecode
- ${sootup.version}
-
-
- org.soot-oss
- sootup.java.bytecode
- ${sootup.version}
-
org.jline
jline
@@ -168,11 +57,6 @@
jline-terminal-jansi
${jline.version}
-
- org.kohsuke
- github-api
- ${github-api.version}
-
org.springframework.boot
spring-boot-starter-test
@@ -185,27 +69,88 @@
${com.restfb.version}
- io.github.java-diff-utils
- java-diff-utils
- ${java-diff-utils.version}
+ org.jooq
+ jool
+ ${jool.version}
+
+
+ net.engio
+ mbassador
+ ${mbassador.version}
+
+
+ javax.el
+ javax.el-api
+ ${javax.el.version}
+
+
+ org.glassfish.web
+ javax.el
+ ${glassfish.web.version}
+
+
+ org.rosuda.REngine
+ Rserve
+ ${rserve.version}
+
+
+ com.github.jbytecode
+ RCaller
+ ${rcaller.version}
+
+
+ org.renjin
+ renjin-script-engine
+ ${renjin.version}
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ com/baeldung/r/FastRMean.java
+
+
+ com/baeldung/r/FastRMeanUnitTest.java
+
+
+
+
+
+
+
+
+ nm-repo
+ Numerical Method's Maven Repository
+ http://repo.numericalmethod.com/maven/
+ default
+
+
+
+ bedatadriven
+ BeDataDriven repository
+ https://nexus.bedatadriven.com/content/groups/public/
+
+
+
2.7.6
3.3.0
6.1.8
- 3.1.2
- 2024.1.20
- 7.28.1
- 0.14.1
- 6.0-rc2
- 2.17.0
- 1.3.0
3.28.0
- 1.327
2025.6.0
- 4.12
+ 0.9.12
+ 1.3.1
+ 3.0.0
+ 2.2.4
+ 3.5-beta72
+ 3.0
+ 1.8.1
diff --git a/libraries-4/src/main/java/com/baeldung/mbassador/AckMessage.java b/libraries-5/src/main/java/com/baeldung/mbassador/AckMessage.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/mbassador/AckMessage.java
rename to libraries-5/src/main/java/com/baeldung/mbassador/AckMessage.java
diff --git a/libraries-4/src/main/java/com/baeldung/mbassador/Message.java b/libraries-5/src/main/java/com/baeldung/mbassador/Message.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/mbassador/Message.java
rename to libraries-5/src/main/java/com/baeldung/mbassador/Message.java
diff --git a/libraries-4/src/main/java/com/baeldung/mbassador/RejectMessage.java b/libraries-5/src/main/java/com/baeldung/mbassador/RejectMessage.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/mbassador/RejectMessage.java
rename to libraries-5/src/main/java/com/baeldung/mbassador/RejectMessage.java
diff --git a/libraries/src/main/java/com/baeldung/r/FastRMean.java b/libraries-5/src/main/java/com/baeldung/r/FastRMean.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/r/FastRMean.java
rename to libraries-5/src/main/java/com/baeldung/r/FastRMean.java
diff --git a/libraries/src/main/java/com/baeldung/r/RCallerMean.java b/libraries-5/src/main/java/com/baeldung/r/RCallerMean.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/r/RCallerMean.java
rename to libraries-5/src/main/java/com/baeldung/r/RCallerMean.java
diff --git a/libraries/src/main/java/com/baeldung/r/RUtils.java b/libraries-5/src/main/java/com/baeldung/r/RUtils.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/r/RUtils.java
rename to libraries-5/src/main/java/com/baeldung/r/RUtils.java
diff --git a/libraries/src/main/java/com/baeldung/r/RenjinMean.java b/libraries-5/src/main/java/com/baeldung/r/RenjinMean.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/r/RenjinMean.java
rename to libraries-5/src/main/java/com/baeldung/r/RenjinMean.java
diff --git a/libraries/src/main/java/com/baeldung/r/RserveMean.java b/libraries-5/src/main/java/com/baeldung/r/RserveMean.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/r/RserveMean.java
rename to libraries-5/src/main/java/com/baeldung/r/RserveMean.java
diff --git a/libraries-5/src/main/resources/logback.xml b/libraries-5/src/main/resources/logback.xml
new file mode 100644
index 000000000000..7d900d8ea884
--- /dev/null
+++ b/libraries-5/src/main/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries-3/src/test/java/com/baeldung/jool/JOOLUnitTest.java b/libraries-5/src/test/java/com/baeldung/jool/JOOLUnitTest.java
similarity index 100%
rename from libraries-3/src/test/java/com/baeldung/jool/JOOLUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/jool/JOOLUnitTest.java
diff --git a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
index 903da009956e..d5d2a6201b5f 100644
--- a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
@@ -1,16 +1,17 @@
package com.baeldung.mbassador;
-import net.engio.mbassy.bus.MBassador;
-import net.engio.mbassy.listener.Handler;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
import static org.awaitility.Awaitility.await;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertNotNull;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import net.engio.mbassy.bus.MBassador;
+import net.engio.mbassy.listener.Handler;
+
public class MBassadorAsyncDispatchUnitTest {
private MBassador dispatcher = new MBassador();
diff --git a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
index bf20645e2d1b..6f88a2a05e1a 100644
--- a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
@@ -1,17 +1,18 @@
package com.baeldung.mbassador;
-import net.engio.mbassy.bus.MBassador;
-import net.engio.mbassy.listener.Handler;
-import net.engio.mbassy.listener.Invoke;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
import static org.awaitility.Awaitility.await;
import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import net.engio.mbassy.bus.MBassador;
+import net.engio.mbassy.listener.Handler;
+import net.engio.mbassy.listener.Invoke;
public class MBassadorAsyncInvocationUnitTest {
diff --git a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
index bd05d2888e20..b28186354f6a 100644
--- a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
@@ -1,16 +1,17 @@
package com.baeldung.mbassador;
-import net.engio.mbassy.bus.MBassador;
-import net.engio.mbassy.bus.common.DeadMessage;
-import net.engio.mbassy.listener.Handler;
-import org.junit.Before;
-import org.junit.Test;
-
import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import org.junit.Before;
+import org.junit.Test;
+
+import net.engio.mbassy.bus.MBassador;
+import net.engio.mbassy.bus.common.DeadMessage;
+import net.engio.mbassy.listener.Handler;
+
public class MBassadorBasicUnitTest {
private MBassador dispatcher = new MBassador();
diff --git a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
similarity index 94%
rename from libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
index 68cfff001457..41716a8ecfbb 100644
--- a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
@@ -1,16 +1,18 @@
package com.baeldung.mbassador;
+import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.LinkedList;
+
+import org.junit.Before;
+import org.junit.Test;
+
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.bus.error.IPublicationErrorHandler;
import net.engio.mbassy.bus.error.PublicationError;
import net.engio.mbassy.listener.Handler;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.*;
-
-import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.*;
public class MBassadorConfigurationUnitTest implements IPublicationErrorHandler {
diff --git a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
similarity index 99%
rename from libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
index 0094140feed1..e9199fda32b7 100644
--- a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
@@ -1,18 +1,19 @@
package com.baeldung.mbassador;
+import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.junit.Before;
+import org.junit.Test;
+
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.bus.common.DeadMessage;
import net.engio.mbassy.bus.common.FilteredMessage;
import net.engio.mbassy.listener.Filter;
import net.engio.mbassy.listener.Filters;
import net.engio.mbassy.listener.Handler;
-import org.junit.Before;
-import org.junit.Test;
-
-import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
public class MBassadorFilterUnitTest {
diff --git a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
similarity index 94%
rename from libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
index 6f1ca83f0a14..2709c66f2a5c 100644
--- a/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
@@ -1,11 +1,13 @@
package com.baeldung.mbassador;
-import net.engio.mbassy.bus.MBassador;
-import net.engio.mbassy.listener.Handler;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
import org.junit.Before;
import org.junit.Test;
-import static org.junit.Assert.*;
+import net.engio.mbassy.bus.MBassador;
+import net.engio.mbassy.listener.Handler;
public class MBassadorHierarchyUnitTest {
diff --git a/libraries/src/test/java/com/baeldung/r/FastRMeanUnitTest.java b/libraries-5/src/test/java/com/baeldung/r/FastRMeanUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/r/FastRMeanUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/r/FastRMeanUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/r/RCallerMeanIntegrationTest.java b/libraries-5/src/test/java/com/baeldung/r/RCallerMeanIntegrationTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/r/RCallerMeanIntegrationTest.java
rename to libraries-5/src/test/java/com/baeldung/r/RCallerMeanIntegrationTest.java
diff --git a/libraries/src/test/java/com/baeldung/r/RenjinMeanUnitTest.java b/libraries-5/src/test/java/com/baeldung/r/RenjinMeanUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/r/RenjinMeanUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/r/RenjinMeanUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/r/RserveMeanIntegrationTest.java b/libraries-5/src/test/java/com/baeldung/r/RserveMeanIntegrationTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/r/RserveMeanIntegrationTest.java
rename to libraries-5/src/test/java/com/baeldung/r/RserveMeanIntegrationTest.java
diff --git a/libraries-5/src/test/resources/logback-test.xml b/libraries-5/src/test/resources/logback-test.xml
new file mode 100644
index 000000000000..8d4771e308ba
--- /dev/null
+++ b/libraries-5/src/test/resources/logback-test.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/test/resources/script.R b/libraries-5/src/test/resources/script.R
similarity index 100%
rename from libraries/src/test/resources/script.R
rename to libraries-5/src/test/resources/script.R
diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml
new file mode 100644
index 000000000000..b3ae0eef9235
--- /dev/null
+++ b/libraries-6/pom.xml
@@ -0,0 +1,95 @@
+
+
+ 4.0.0
+ libraries-6
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.jdeferred
+ jdeferred-core
+ ${jdeferred.version}
+
+
+ com.machinezoo.noexception
+ noexception
+ ${noexception.version}
+
+
+ io.atlassian.fugue
+ fugue
+ ${fugue.version}
+
+
+ com.jcabi
+ jcabi-aspects
+ ${jcabi-aspects.version}
+
+
+ org.aspectj
+ aspectjrt
+ ${aspectjrt.version}
+ runtime
+
+
+ info.debatty
+ java-lsh
+ ${java-lsh.version}
+
+
+ org.functionaljava
+ functionaljava-java8
+ ${functionaljava.version}
+
+
+
+
+
+
+ com.jcabi
+ jcabi-maven-plugin
+ ${jcabi-maven-plugin.version}
+
+
+
+ ajc
+
+
+
+
+
+ org.aspectj
+ aspectjtools
+ ${aspectjtools.version}
+
+
+ org.aspectj
+ aspectjweaver
+ ${aspectjweaver.version}
+
+
+
+
+
+
+
+ 1.2.6
+ 1.1.0
+ 4.5.1
+ 0.26.0
+ 1.9.20.1
+ 0.14.1
+ 1.9.20.1
+ 1.9.20.1
+ 0.10
+ 4.8.1
+
+
+
diff --git a/libraries-3/src/main/java/com/baeldung/arthas/FibonacciGenerator.java b/libraries-6/src/main/java/com/baeldung/arthas/FibonacciGenerator.java
similarity index 100%
rename from libraries-3/src/main/java/com/baeldung/arthas/FibonacciGenerator.java
rename to libraries-6/src/main/java/com/baeldung/arthas/FibonacciGenerator.java
index 27cf0dacf66a..5af068ce3d26 100644
--- a/libraries-3/src/main/java/com/baeldung/arthas/FibonacciGenerator.java
+++ b/libraries-6/src/main/java/com/baeldung/arthas/FibonacciGenerator.java
@@ -1,9 +1,9 @@
package com.baeldung.arthas;
-import java.io.IOException;
-
import static java.lang.String.format;
+import java.io.IOException;
+
public class FibonacciGenerator {
public static void main(String[] args) throws IOException {
diff --git a/libraries/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java b/libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
rename to libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
diff --git a/libraries/src/main/java/com/baeldung/fj/FunctionalJavaMain.java b/libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
rename to libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
diff --git a/libraries-3/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java b/libraries-6/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java
similarity index 93%
rename from libraries-3/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java
rename to libraries-6/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java
index 20a2ed65b36e..127bf3248550 100644
--- a/libraries-3/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java
+++ b/libraries-6/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java
@@ -1,12 +1,13 @@
package com.baeldung.jcabi;
-
import java.io.BufferedReader;
-import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.net.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@@ -92,7 +93,7 @@ public static void divideByZero() {
int x = 1/0;
}
- @RetryOnFailure(attempts = 2, types = {java.lang.NumberFormatException.class})
+ @RetryOnFailure(attempts = 2, types = { NumberFormatException.class})
@Quietly
public static void divideByZeroQuietly() {
int x = 1/0;
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/FilterDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/FilterDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/FilterDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/FilterDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/PipeDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/PipeDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/PipeDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/PipeDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/PromiseDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java b/libraries-6/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
rename to libraries-6/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
diff --git a/libraries-4/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java b/libraries-6/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
similarity index 100%
rename from libraries-4/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
rename to libraries-6/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
diff --git a/libraries-6/src/main/resources/logback.xml b/libraries-6/src/main/resources/logback.xml
new file mode 100644
index 000000000000..7d900d8ea884
--- /dev/null
+++ b/libraries-6/src/main/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java b/libraries-6/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
diff --git a/libraries-3/src/test/java/com/baeldung/fugue/FugueUnitTest.java b/libraries-6/src/test/java/com/baeldung/fugue/FugueUnitTest.java
similarity index 96%
rename from libraries-3/src/test/java/com/baeldung/fugue/FugueUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/fugue/FugueUnitTest.java
index 1f54bdf6cf21..e05a4deda8a2 100644
--- a/libraries-3/src/test/java/com/baeldung/fugue/FugueUnitTest.java
+++ b/libraries-6/src/test/java/com/baeldung/fugue/FugueUnitTest.java
@@ -17,7 +17,14 @@
import org.junit.Assert;
import org.junit.Test;
-import io.atlassian.fugue.*;
+import io.atlassian.fugue.Checked;
+import io.atlassian.fugue.Either;
+import io.atlassian.fugue.Iterables;
+import io.atlassian.fugue.Option;
+import io.atlassian.fugue.Options;
+import io.atlassian.fugue.Pair;
+import io.atlassian.fugue.Try;
+import io.atlassian.fugue.Unit;
public class FugueUnitTest {
diff --git a/libraries-4/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java b/libraries-6/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
similarity index 100%
rename from libraries-4/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/lsh/LocalSensitiveHashingUnitTest.java b/libraries-6/src/test/java/com/baeldung/lsh/LocalSensitiveHashingUnitTest.java
similarity index 99%
rename from libraries/src/test/java/com/baeldung/lsh/LocalSensitiveHashingUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/lsh/LocalSensitiveHashingUnitTest.java
index 5928765aaa78..f597cff74431 100644
--- a/libraries/src/test/java/com/baeldung/lsh/LocalSensitiveHashingUnitTest.java
+++ b/libraries-6/src/test/java/com/baeldung/lsh/LocalSensitiveHashingUnitTest.java
@@ -1,12 +1,13 @@
package com.baeldung.lsh;
-import info.debatty.java.lsh.LSHMinHash;
-import org.junit.Ignore;
-import org.junit.Test;
+import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
-import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import info.debatty.java.lsh.LSHMinHash;
public class LocalSensitiveHashingUnitTest {
diff --git a/libraries-4/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java b/libraries-6/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
similarity index 100%
rename from libraries-4/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
diff --git a/libraries-7/pom.xml b/libraries-7/pom.xml
new file mode 100644
index 000000000000..a6c1cd92a320
--- /dev/null
+++ b/libraries-7/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+ libraries-7
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+
+
+
+ io.github.java-diff-utils
+ java-diff-utils
+ ${java-diff-utils.version}
+
+
+ am.ik.yavi
+ yavi
+ ${yavi.version}
+
+
+ systems.manifold
+ manifold-json-rt
+ ${manifold.version}
+
+
+ systems.manifold
+ manifold-csv-rt
+ ${manifold.version}
+
+
+ systems.manifold
+ manifold-xml-rt
+ ${manifold.version}
+
+
+ systems.manifold
+ manifold-yaml-rt
+ ${manifold.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 17
+ 17
+
+ -Xplugin:Manifold
+
+
+
+ systems.manifold
+ manifold-json
+ ${manifold.version}
+
+
+ am.ik.yavi
+ yavi
+ ${yavi.version}
+
+
+
+
+
+
+
+
+ 4.12
+ 0.14.1
+ 2024.1.20
+
+
+
diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/PatchUtil.java b/libraries-7/src/main/java/com/baeldung/javadiffutils/PatchUtil.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/javadiffutils/PatchUtil.java
rename to libraries-7/src/main/java/com/baeldung/javadiffutils/PatchUtil.java
diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java b/libraries-7/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java
rename to libraries-7/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java
diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java b/libraries-7/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java
rename to libraries-7/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java
diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java b/libraries-7/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java
rename to libraries-7/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java
diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java b/libraries-7/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java
rename to libraries-7/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java
diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java b/libraries-7/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java
rename to libraries-7/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java
diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java b/libraries-7/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java
rename to libraries-7/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java
diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java b/libraries-7/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java
rename to libraries-7/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java
diff --git a/libraries-5/src/test/java/com/baeldung/manifold/ComplexUnitTest.java b/libraries-7/src/test/java/com/baeldung/manifold/ComplexUnitTest.java
similarity index 91%
rename from libraries-5/src/test/java/com/baeldung/manifold/ComplexUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/manifold/ComplexUnitTest.java
index 30425df3c66d..d53893ca9919 100644
--- a/libraries-5/src/test/java/com/baeldung/manifold/ComplexUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/manifold/ComplexUnitTest.java
@@ -1,10 +1,10 @@
package com.baeldung.manifold;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
import java.time.LocalDateTime;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
public class ComplexUnitTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/manifold/ComplexUserUnitTest.java b/libraries-7/src/test/java/com/baeldung/manifold/ComplexUserUnitTest.java
similarity index 91%
rename from libraries-5/src/test/java/com/baeldung/manifold/ComplexUserUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/manifold/ComplexUserUnitTest.java
index 59720373fc9f..560e619b3dc9 100644
--- a/libraries-5/src/test/java/com/baeldung/manifold/ComplexUserUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/manifold/ComplexUserUnitTest.java
@@ -1,8 +1,8 @@
package com.baeldung.manifold;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
public class ComplexUserUnitTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/manifold/ComposedUnitTest.java b/libraries-7/src/test/java/com/baeldung/manifold/ComposedUnitTest.java
similarity index 93%
rename from libraries-5/src/test/java/com/baeldung/manifold/ComposedUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/manifold/ComposedUnitTest.java
index 48852a386a0c..a3b7a5458795 100644
--- a/libraries-5/src/test/java/com/baeldung/manifold/ComposedUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/manifold/ComposedUnitTest.java
@@ -1,10 +1,10 @@
package com.baeldung.manifold;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
public class ComposedUnitTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/manifold/SimpleUserUnitTest.java b/libraries-7/src/test/java/com/baeldung/manifold/SimpleUserUnitTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/manifold/SimpleUserUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/manifold/SimpleUserUnitTest.java
index 0a8123fc2b5b..7b7e79022bec 100644
--- a/libraries-5/src/test/java/com/baeldung/manifold/SimpleUserUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/manifold/SimpleUserUnitTest.java
@@ -1,12 +1,12 @@
package com.baeldung.manifold;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
public class SimpleUserUnitTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/ArgumentsAnnotationUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/ArgumentsAnnotationUnitTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/yavi/ArgumentsAnnotationUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/ArgumentsAnnotationUnitTest.java
index 5df11c879a03..11cb11014284 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/ArgumentsAnnotationUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/ArgumentsAnnotationUnitTest.java
@@ -1,14 +1,15 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.util.NoSuchElementException;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.arguments.Arguments2Validator;
import am.ik.yavi.builder.ArgumentsValidatorBuilder;
import am.ik.yavi.core.Validated;
import am.ik.yavi.meta.ConstraintArguments;
-import org.junit.jupiter.api.Test;
-
-import java.util.NoSuchElementException;
-
-import static org.junit.jupiter.api.Assertions.*;
public class ArgumentsAnnotationUnitTest {
record Person(String name, int age) {
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/ArgumentsValidatorUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/ArgumentsValidatorUnitTest.java
similarity index 100%
rename from libraries-5/src/test/java/com/baeldung/yavi/ArgumentsValidatorUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/ArgumentsValidatorUnitTest.java
index 899448215bf4..12cfaa67a251 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/ArgumentsValidatorUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/ArgumentsValidatorUnitTest.java
@@ -1,15 +1,15 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+import java.util.NoSuchElementException;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.arguments.Arguments1;
import am.ik.yavi.arguments.Arguments2;
import am.ik.yavi.arguments.Arguments2Validator;
import am.ik.yavi.builder.ArgumentsValidatorBuilder;
import am.ik.yavi.core.Validated;
-import org.junit.jupiter.api.Test;
-
-import java.util.NoSuchElementException;
-
-import static org.junit.jupiter.api.Assertions.*;
public class ArgumentsValidatorUnitTest {
record Person(String name, int age) {
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/ConditionalConstraintUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/ConditionalConstraintUnitTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/yavi/ConditionalConstraintUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/ConditionalConstraintUnitTest.java
index 5369b3f695e1..0f43c34363f3 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/ConditionalConstraintUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/ConditionalConstraintUnitTest.java
@@ -1,12 +1,13 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.builder.ValidatorBuilder;
import am.ik.yavi.core.ConstraintGroup;
import am.ik.yavi.core.ConstraintViolations;
import am.ik.yavi.core.Validator;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
public class ConditionalConstraintUnitTest {
record Person(String id, String name) {}
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/CrossFieldUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/CrossFieldUnitTest.java
similarity index 89%
rename from libraries-5/src/test/java/com/baeldung/yavi/CrossFieldUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/CrossFieldUnitTest.java
index cebc2cef885b..2482aa0eacc9 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/CrossFieldUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/CrossFieldUnitTest.java
@@ -1,12 +1,12 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.builder.ValidatorBuilder;
import am.ik.yavi.core.ConstraintViolations;
import am.ik.yavi.core.Validator;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
public class CrossFieldUnitTest {
record Range(int start, int end) {}
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/CustomConstraintUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/CustomConstraintUnitTest.java
similarity index 97%
rename from libraries-5/src/test/java/com/baeldung/yavi/CustomConstraintUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/CustomConstraintUnitTest.java
index f849272e814a..501685ed2d0b 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/CustomConstraintUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/CustomConstraintUnitTest.java
@@ -1,15 +1,13 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.builder.ValidatorBuilder;
import am.ik.yavi.core.ConstraintViolations;
import am.ik.yavi.core.CustomConstraint;
import am.ik.yavi.core.Validator;
-import org.junit.jupiter.api.Test;
-
-import java.net.Inet4Address;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
public class CustomConstraintUnitTest {
record Data(String palindrome) {}
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/NestedRecordUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/NestedRecordUnitTest.java
similarity index 91%
rename from libraries-5/src/test/java/com/baeldung/yavi/NestedRecordUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/NestedRecordUnitTest.java
index 429d7c42ed89..ac614c262007 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/NestedRecordUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/NestedRecordUnitTest.java
@@ -1,12 +1,12 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.builder.ValidatorBuilder;
import am.ik.yavi.core.ConstraintViolations;
import am.ik.yavi.core.Validator;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
public class NestedRecordUnitTest {
private Validator nameValidator = ValidatorBuilder.of(Name.class)
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/PrimitiveUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/PrimitiveUnitTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/yavi/PrimitiveUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/PrimitiveUnitTest.java
index dffb7fac1925..3ffd718b0129 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/PrimitiveUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/PrimitiveUnitTest.java
@@ -1,13 +1,14 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.arguments.IntegerValidator;
import am.ik.yavi.arguments.StringValidator;
import am.ik.yavi.builder.IntegerValidatorBuilder;
import am.ik.yavi.builder.StringValidatorBuilder;
import am.ik.yavi.core.Validated;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
public class PrimitiveUnitTest {
@Test
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/RecordUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/RecordUnitTest.java
similarity index 99%
rename from libraries-5/src/test/java/com/baeldung/yavi/RecordUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/RecordUnitTest.java
index f19f5901e6f6..86746b4f3b4a 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/RecordUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/RecordUnitTest.java
@@ -1,11 +1,12 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.builder.ValidatorBuilder;
import am.ik.yavi.core.ConstraintViolations;
import am.ik.yavi.core.Validator;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
public class RecordUnitTest {
private Validator validator = ValidatorBuilder.of(Person.class)
diff --git a/libraries-5/src/test/java/com/baeldung/yavi/TargetAnnotationUnitTest.java b/libraries-7/src/test/java/com/baeldung/yavi/TargetAnnotationUnitTest.java
similarity index 97%
rename from libraries-5/src/test/java/com/baeldung/yavi/TargetAnnotationUnitTest.java
rename to libraries-7/src/test/java/com/baeldung/yavi/TargetAnnotationUnitTest.java
index f41e86c792c0..cf8abb887212 100644
--- a/libraries-5/src/test/java/com/baeldung/yavi/TargetAnnotationUnitTest.java
+++ b/libraries-7/src/test/java/com/baeldung/yavi/TargetAnnotationUnitTest.java
@@ -1,13 +1,13 @@
package com.baeldung.yavi;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
import am.ik.yavi.builder.ValidatorBuilder;
import am.ik.yavi.core.ConstraintViolations;
import am.ik.yavi.core.Validator;
import am.ik.yavi.meta.ConstraintTarget;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
public class TargetAnnotationUnitTest {
record Person(@ConstraintTarget String name, @ConstraintTarget int age) {}
diff --git a/libraries-5/src/test/resources/com/baeldung/manifold/Complex.json b/libraries-7/src/test/resources/com/baeldung/manifold/Complex.json
similarity index 100%
rename from libraries-5/src/test/resources/com/baeldung/manifold/Complex.json
rename to libraries-7/src/test/resources/com/baeldung/manifold/Complex.json
diff --git a/libraries-5/src/test/resources/com/baeldung/manifold/ComplexUser.json b/libraries-7/src/test/resources/com/baeldung/manifold/ComplexUser.json
similarity index 100%
rename from libraries-5/src/test/resources/com/baeldung/manifold/ComplexUser.json
rename to libraries-7/src/test/resources/com/baeldung/manifold/ComplexUser.json
diff --git a/libraries-5/src/test/resources/com/baeldung/manifold/Composed.json b/libraries-7/src/test/resources/com/baeldung/manifold/Composed.json
similarity index 100%
rename from libraries-5/src/test/resources/com/baeldung/manifold/Composed.json
rename to libraries-7/src/test/resources/com/baeldung/manifold/Composed.json
diff --git a/libraries-5/src/test/resources/com/baeldung/manifold/SimpleUser.json b/libraries-7/src/test/resources/com/baeldung/manifold/SimpleUser.json
similarity index 100%
rename from libraries-5/src/test/resources/com/baeldung/manifold/SimpleUser.json
rename to libraries-7/src/test/resources/com/baeldung/manifold/SimpleUser.json
diff --git a/libraries-5/src/test/resources/com/baeldung/manifold/simpleUserData.json b/libraries-7/src/test/resources/com/baeldung/manifold/simpleUserData.json
similarity index 100%
rename from libraries-5/src/test/resources/com/baeldung/manifold/simpleUserData.json
rename to libraries-7/src/test/resources/com/baeldung/manifold/simpleUserData.json
diff --git a/libraries/pom.xml b/libraries/pom.xml
index eac9156458ad..e99754f4e6ae 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -29,11 +29,6 @@
commons-net
${commons-net.version}
-
- org.javers
- javers-core
- ${javers.version}
-
org.datanucleus
@@ -70,7 +65,6 @@
datanucleus-jdo-query
${datanucleus-jdo-query.version}
-
org.springframework
spring-web
@@ -99,11 +93,6 @@
quartz
${quartz.version}
-
- info.debatty
- java-lsh
- ${java-lsh.version}
-
commons-io
commons-io
@@ -126,21 +115,6 @@
google-oauth-client-jetty
${google-api.version}
-
- com.squareup
- javapoet
- ${javapoet.version}
-
-
- com.googlecode.libphonenumber
- libphonenumber
- ${libphonenumber.version}
-
-
- org.functionaljava
- functionaljava-java8
- ${functionaljava.version}
-
io.github.resilience4j
resilience4j-circuitbreaker
@@ -162,42 +136,33 @@
${resilience4j.version}
- org.rosuda.REngine
- Rserve
- ${rserve.version}
+ io.activej
+ activej-inject
+ ${activej.version}
- com.github.jbytecode
- RCaller
- ${rcaller.version}
+ io.activej
+ activej-promise
+ ${activej.version}
- org.renjin
- renjin-script-engine
- ${renjin.version}
+ io.activej
+ activej-test
+ ${activej.version}
+ test
+
+
+ io.activej
+ activej-http
+ ${activej.version}
- org.agrona
- agrona
- ${agrona.version}
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-databind.version}
-
-
- nm-repo
- Numerical Method's Maven Repository
- http://repo.numericalmethod.com/maven/
- default
-
-
-
- bedatadriven
- BeDataDriven repository
- https://nexus.bedatadriven.com/content/groups/public/
-
-
-
@@ -282,86 +247,17 @@
-
- org.codehaus.mojo
- exec-maven-plugin
- ${exec-maven-plugin.version}
-
-
- generate-sources
-
- java
-
-
-
-
- false
- true
- uk.co.real_logic.sbe.SbeTool
-
-
- sbe.output.dir
- ${project.build.directory}/generated-sources/java
-
-
-
- ${project.basedir}/src/main/resources/schema.xml
-
- ${project.build.directory}/generated-sources/java
-
-
-
- uk.co.real-logic
- sbe-tool
- ${sbe-tool.version}
-
-
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
- ${build-helper-maven-plugin.version}
-
-
- add-source
- generate-sources
-
- add-source
-
-
-
- ${project.build.directory}/generated-sources/java/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- com/baeldung/r/FastRMean.java
-
-
- com/baeldung/r/FastRMeanUnitTest.java
-
-
-
2.2
3.2.7
- 3.1.0
1.9.26
1.41.0
1.9.0
1.9.27
1.1.0
- 0.10
3.5.0
2.0.0.0
1.15
@@ -377,16 +273,9 @@
3.0.3
2.3.0
3.6
- 1.10.0
- 8.12.9
- 4.8.1
2.1.0
- 3.5-beta72
- 3.0
- 1.8.1
- 1.17.1
- 1.27.0
- 3.0.0
+ 6.0-rc2
+ 2.17.0
\ No newline at end of file
diff --git a/libraries-5/src/main/java/com/baeldung/activej/config/PersonModule.java b/libraries/src/main/java/com/baeldung/activej/config/PersonModule.java
similarity index 99%
rename from libraries-5/src/main/java/com/baeldung/activej/config/PersonModule.java
rename to libraries/src/main/java/com/baeldung/activej/config/PersonModule.java
index 22ba15d471e1..39eaa40fa753 100644
--- a/libraries-5/src/main/java/com/baeldung/activej/config/PersonModule.java
+++ b/libraries/src/main/java/com/baeldung/activej/config/PersonModule.java
@@ -1,18 +1,20 @@
package com.baeldung.activej.config;
-import com.baeldung.activej.controller.PersonController;
-import com.baeldung.activej.repository.PersonRepository;
-import com.baeldung.activej.service.PersonService;
-import io.activej.inject.annotation.Provides;
-import io.activej.inject.module.AbstractModule;
-
-import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;
+import javax.sql.DataSource;
+
+import com.baeldung.activej.controller.PersonController;
+import com.baeldung.activej.repository.PersonRepository;
+import com.baeldung.activej.service.PersonService;
+
+import io.activej.inject.annotation.Provides;
+import io.activej.inject.module.AbstractModule;
+
public class PersonModule extends AbstractModule {
@Provides
diff --git a/libraries-5/src/main/java/com/baeldung/activej/controller/PersonController.java b/libraries/src/main/java/com/baeldung/activej/controller/PersonController.java
similarity index 99%
rename from libraries-5/src/main/java/com/baeldung/activej/controller/PersonController.java
rename to libraries/src/main/java/com/baeldung/activej/controller/PersonController.java
index 55354765ccc6..99251701e370 100644
--- a/libraries-5/src/main/java/com/baeldung/activej/controller/PersonController.java
+++ b/libraries/src/main/java/com/baeldung/activej/controller/PersonController.java
@@ -2,6 +2,7 @@
import com.baeldung.activej.service.PersonService;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import io.activej.http.AsyncServlet;
import io.activej.http.HttpRequest;
import io.activej.http.HttpResponse;
diff --git a/libraries-5/src/main/java/com/baeldung/activej/model/Person.java b/libraries/src/main/java/com/baeldung/activej/model/Person.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/activej/model/Person.java
rename to libraries/src/main/java/com/baeldung/activej/model/Person.java
diff --git a/libraries-5/src/main/java/com/baeldung/activej/model/VerifiedPerson.java b/libraries/src/main/java/com/baeldung/activej/model/VerifiedPerson.java
similarity index 100%
rename from libraries-5/src/main/java/com/baeldung/activej/model/VerifiedPerson.java
rename to libraries/src/main/java/com/baeldung/activej/model/VerifiedPerson.java
diff --git a/libraries-5/src/main/java/com/baeldung/activej/repository/PersonRepository.java b/libraries/src/main/java/com/baeldung/activej/repository/PersonRepository.java
similarity index 99%
rename from libraries-5/src/main/java/com/baeldung/activej/repository/PersonRepository.java
rename to libraries/src/main/java/com/baeldung/activej/repository/PersonRepository.java
index f97608e5f371..2dee50a22d82 100644
--- a/libraries-5/src/main/java/com/baeldung/activej/repository/PersonRepository.java
+++ b/libraries/src/main/java/com/baeldung/activej/repository/PersonRepository.java
@@ -1,12 +1,14 @@
package com.baeldung.activej.repository;
+import java.time.Duration;
+
+import javax.sql.DataSource;
+
import com.baeldung.activej.model.Person;
+
import io.activej.promise.Promise;
import io.activej.promise.Promises;
-import javax.sql.DataSource;
-import java.time.Duration;
-
public class PersonRepository {
private final DataSource dataSource;
diff --git a/libraries-5/src/main/java/com/baeldung/activej/service/PersonService.java b/libraries/src/main/java/com/baeldung/activej/service/PersonService.java
similarity index 99%
rename from libraries-5/src/main/java/com/baeldung/activej/service/PersonService.java
rename to libraries/src/main/java/com/baeldung/activej/service/PersonService.java
index 6a03e9e148ad..60a55869a422 100644
--- a/libraries-5/src/main/java/com/baeldung/activej/service/PersonService.java
+++ b/libraries/src/main/java/com/baeldung/activej/service/PersonService.java
@@ -2,6 +2,7 @@
import com.baeldung.activej.model.VerifiedPerson;
import com.baeldung.activej.repository.PersonRepository;
+
import io.activej.promise.Promise;
public class PersonService {
diff --git a/libraries-5/src/test/java/com/baeldung/activej/ActiveJIntegrationTest.java b/libraries/src/test/java/com/baeldung/activej/ActiveJIntegrationTest.java
similarity index 98%
rename from libraries-5/src/test/java/com/baeldung/activej/ActiveJIntegrationTest.java
rename to libraries/src/test/java/com/baeldung/activej/ActiveJIntegrationTest.java
index 30633a98b04c..ac6ab29622f8 100644
--- a/libraries-5/src/test/java/com/baeldung/activej/ActiveJIntegrationTest.java
+++ b/libraries/src/test/java/com/baeldung/activej/ActiveJIntegrationTest.java
@@ -14,11 +14,9 @@
import java.io.IOException;
import java.net.InetAddress;
-import java.net.InetSocketAddress;
import java.net.ServerSocket;
import static org.junit.jupiter.api.Assertions.assertEquals;
-
public class ActiveJIntegrationTest {
private static final ObjectMapper objectMapper = new ObjectMapper();
diff --git a/libraries-5/src/test/java/com/baeldung/activej/ActiveJTest.java b/libraries/src/test/java/com/baeldung/activej/ActiveJTest.java
similarity index 79%
rename from libraries-5/src/test/java/com/baeldung/activej/ActiveJTest.java
rename to libraries/src/test/java/com/baeldung/activej/ActiveJTest.java
index f5c8e5ff58c6..23c300349b6c 100644
--- a/libraries-5/src/test/java/com/baeldung/activej/ActiveJTest.java
+++ b/libraries/src/test/java/com/baeldung/activej/ActiveJTest.java
@@ -3,8 +3,10 @@
import com.baeldung.activej.config.PersonModule;
import com.baeldung.activej.repository.PersonRepository;
import com.baeldung.activej.service.PersonService;
+
import io.activej.eventloop.Eventloop;
import io.activej.inject.Injector;
+
import org.junit.jupiter.api.Test;
import javax.sql.DataSource;
@@ -18,7 +20,8 @@ public class ActiveJTest {
void givenPersonModule_whenGetTheServiceBean_thenAllTheDependenciesShouldBePresent() {
PersonModule personModule = new PersonModule();
- PersonService personService = Injector.of(personModule).getInstance(PersonService.class);
+ PersonService personService = Injector.of(personModule)
+ .getInstance(PersonService.class);
assertNotNull(personService);
PersonRepository personRepository = personService.getPersonRepository();
assertNotNull(personRepository);
@@ -30,11 +33,12 @@ void givenPersonModule_whenGetTheServiceBean_thenAllTheDependenciesShouldBePrese
void givenEventloop_whenCallFindAndVerifyPerson_thenExpectedVerificationResultShouldBePresent() {
PersonModule personModule = new PersonModule();
- PersonService personService = Injector.of(personModule).getInstance(PersonService.class);
+ PersonService personService = Injector.of(personModule)
+ .getInstance(PersonService.class);
Eventloop eventloop = Eventloop.create();
eventloop.run();
personService.findAndVerifyPerson("Good person")
- .whenResult(verifiedPerson -> assertEquals("SUCCESS", verifiedPerson.result()));
+ .whenResult(verifiedPerson -> assertEquals("SUCCESS", verifiedPerson.result()));
}
}
diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml
index 0c2e2128ef55..e18414b7d560 100644
--- a/logging-modules/logback/pom.xml
+++ b/logging-modules/logback/pom.xml
@@ -24,6 +24,12 @@
logback-classic
${logback.version}
+
+
+ ch.qos.logback
+ logback-core
+ ${logback.version}
+
ch.qos.logback.contrib
logback-json-classic
@@ -109,10 +115,10 @@
3.3.5
2.0.1
2.0.0
- 1.5.6
+ 1.5.18
2.1.0-alpha1
3.1.12
8.0
-
\ No newline at end of file
+
diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java
index bcfad4d7d256..4ff8413ac430 100644
--- a/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java
+++ b/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java
@@ -47,20 +47,4 @@ public void whenSystemPropertyIsPresent_thenReturnFileLogger() throws IOExceptio
String logOutput = FileUtils.readFileToString(new File("conditional.log"));
assertTrue(logOutput.contains("test prod log"));
}
-
- @Test
- public void whenMatchedWithEvaluatorFilter_thenReturnFilteredLogs() throws IOException {
- logger = (Logger) LoggerFactory.getLogger(ConditionalLoggingUnitTest.class);
-
- logger.info("normal log");
- logger.info("billing details: XXXX");
- String normalLog = FileUtils.readFileToString(new File("conditional.log"));
- assertTrue(normalLog.contains("normal log"));
- assertTrue(normalLog.contains("billing details: XXXX"));
-
- String filteredLog = FileUtils.readFileToString(new File("filtered.log"));
- assertTrue(filteredLog.contains("test prod log"));
- assertFalse(filteredLog.contains("billing details: XXXX"));
- }
-
}
diff --git a/mapstruct-2/pom.xml b/mapstruct-2/pom.xml
index ed2cb8f39f48..72c6aeae386e 100644
--- a/mapstruct-2/pom.xml
+++ b/mapstruct-2/pom.xml
@@ -25,6 +25,18 @@
${lombok.version}
provided
+
+ org.springframework
+ spring-context
+ ${springframework.version}
+ test
+
+
+ org.springframework
+ spring-test
+ ${springframework.version}
+ test
+
mapstruct-2
@@ -60,6 +72,7 @@
1.6.3
0.2.0
+ 6.2.1
diff --git a/mapstruct-2/src/main/java/com/baeldung/dto/MediaDto.java b/mapstruct-2/src/main/java/com/baeldung/dto/MediaDto.java
new file mode 100644
index 000000000000..cbe9510145be
--- /dev/null
+++ b/mapstruct-2/src/main/java/com/baeldung/dto/MediaDto.java
@@ -0,0 +1,37 @@
+package com.baeldung.dto;
+
+public class MediaDto {
+
+ private Long id;
+
+ private String title;
+
+ public MediaDto(Long id, String title) {
+ this.id = id;
+ this.title = title;
+ }
+
+ public MediaDto() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return "MediaDto{" + "id=" + id + ", title='" + title + '\'' + '}';
+ }
+}
diff --git a/mapstruct-2/src/main/java/com/baeldung/entity/Media.java b/mapstruct-2/src/main/java/com/baeldung/entity/Media.java
new file mode 100644
index 000000000000..4b11472a46e1
--- /dev/null
+++ b/mapstruct-2/src/main/java/com/baeldung/entity/Media.java
@@ -0,0 +1,37 @@
+package com.baeldung.entity;
+
+public class Media {
+
+ private Long id;
+
+ private String title;
+
+ public Media(Long id, String title) {
+ this.id = id;
+ this.title = title;
+ }
+
+ public Media() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return "Media{" + "id=" + id + ", title='" + title + '\'' + '}';
+ }
+}
diff --git a/mapstruct-2/src/main/java/com/baeldung/mapper/MediaMapper.java b/mapstruct-2/src/main/java/com/baeldung/mapper/MediaMapper.java
new file mode 100644
index 000000000000..2629a1820a3e
--- /dev/null
+++ b/mapstruct-2/src/main/java/com/baeldung/mapper/MediaMapper.java
@@ -0,0 +1,15 @@
+package com.baeldung.mapper;
+
+import org.mapstruct.Mapper;
+
+import com.baeldung.dto.MediaDto;
+import com.baeldung.entity.Media;
+
+@Mapper
+public interface MediaMapper {
+
+ MediaDto toDto(Media media);
+
+ Media toEntity(MediaDto mediaDto);
+
+}
diff --git a/mapstruct-2/src/main/java/com/baeldung/service/MediaService.java b/mapstruct-2/src/main/java/com/baeldung/service/MediaService.java
new file mode 100644
index 000000000000..2e0fcf064ab1
--- /dev/null
+++ b/mapstruct-2/src/main/java/com/baeldung/service/MediaService.java
@@ -0,0 +1,26 @@
+package com.baeldung.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.baeldung.dto.MediaDto;
+import com.baeldung.entity.Media;
+import com.baeldung.mapper.MediaMapper;
+
+public class MediaService {
+
+ final Logger logger = LoggerFactory.getLogger(MediaService.class);
+
+ private final MediaMapper mediaMapper;
+
+ public MediaService(MediaMapper mediaMapper) {
+ this.mediaMapper = mediaMapper;
+ }
+
+ public Media persistMedia(MediaDto mediaDto) {
+ Media media = mediaMapper.toEntity(mediaDto);
+ logger.info("Persist media: {}", media);
+ return media;
+ }
+
+}
diff --git a/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceGeneratedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceGeneratedMapperUnitTest.java
new file mode 100644
index 000000000000..32a8873403a3
--- /dev/null
+++ b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceGeneratedMapperUnitTest.java
@@ -0,0 +1,23 @@
+package com.baeldung.service;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.mapstruct.factory.Mappers;
+
+import com.baeldung.dto.MediaDto;
+import com.baeldung.entity.Media;
+import com.baeldung.mapper.MediaMapper;
+
+public class MediaServiceGeneratedMapperUnitTest {
+
+ @Test
+ public void whenGeneratedMapperIsUsed_thenActualValuesAreMapped() {
+ MediaService mediaService = new MediaService(Mappers.getMapper(MediaMapper.class));
+ MediaDto mediaDto = new MediaDto(1L, "title 1");
+ Media persisted = mediaService.persistMedia(mediaDto);
+ assertEquals(mediaDto.getId(), persisted.getId());
+ assertEquals(mediaDto.getTitle(), persisted.getTitle());
+ }
+
+}
diff --git a/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceMockedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceMockedMapperUnitTest.java
new file mode 100644
index 000000000000..a956b29fd586
--- /dev/null
+++ b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceMockedMapperUnitTest.java
@@ -0,0 +1,32 @@
+package com.baeldung.service;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+
+import com.baeldung.dto.MediaDto;
+import com.baeldung.entity.Media;
+import com.baeldung.mapper.MediaMapper;
+
+public class MediaServiceMockedMapperUnitTest {
+
+ @Test
+ public void whenMockedMapperIsUsed_thenMockedValuesAreMapped() {
+ MediaMapper mockMediaMapper = mock(MediaMapper.class);
+ Media mockedMedia = new Media(5L, "Title 5");
+ when(mockMediaMapper.toEntity(any())).thenReturn(mockedMedia);
+
+ MediaService mediaService = new MediaService(mockMediaMapper);
+ MediaDto mediaDto = new MediaDto(1L, "title 1");
+ Media persisted = mediaService.persistMedia(mediaDto);
+
+ verify(mockMediaMapper).toEntity(mediaDto);
+ assertEquals(mockedMedia.getId(), persisted.getId());
+ assertEquals(mockedMedia.getTitle(), persisted.getTitle());
+ }
+
+}
diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/Config.java b/mapstruct-2/src/test/java/com/baeldung/spring/Config.java
new file mode 100644
index 000000000000..e3f952b5d838
--- /dev/null
+++ b/mapstruct-2/src/test/java/com/baeldung/spring/Config.java
@@ -0,0 +1,17 @@
+package com.baeldung.spring;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.baeldung.mapper.MediaMapper;
+import com.baeldung.service.MediaService;
+
+@Configuration
+public class Config {
+
+ @Bean
+ public MediaService mediaService(MediaMapper mediaMapper) {
+ return new MediaService(mediaMapper);
+ }
+
+}
diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringGeneratedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringGeneratedMapperUnitTest.java
new file mode 100644
index 000000000000..e061dbb628fd
--- /dev/null
+++ b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringGeneratedMapperUnitTest.java
@@ -0,0 +1,30 @@
+package com.baeldung.spring;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baeldung.dto.MediaDto;
+import com.baeldung.entity.Media;
+import com.baeldung.service.MediaService;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = { Config.class, MediaSpringMapperImpl.class })
+public class MediaServiceSpringGeneratedMapperUnitTest {
+
+ @Autowired
+ MediaService mediaService;
+
+ @Test
+ public void whenGeneratedSpringMapperIsUsed_thenActualValuesAreMapped() {
+ MediaDto mediaDto = new MediaDto(1L, "title 1");
+ Media persisted = mediaService.persistMedia(mediaDto);
+ assertEquals(mediaDto.getId(), persisted.getId());
+ assertEquals(mediaDto.getTitle(), persisted.getTitle());
+ }
+
+}
diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringMockedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringMockedMapperUnitTest.java
new file mode 100644
index 000000000000..a7799e6ebc94
--- /dev/null
+++ b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringMockedMapperUnitTest.java
@@ -0,0 +1,42 @@
+package com.baeldung.spring;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatchers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.bean.override.mockito.MockitoBean;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baeldung.dto.MediaDto;
+import com.baeldung.entity.Media;
+import com.baeldung.service.MediaService;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = Config.class)
+public class MediaServiceSpringMockedMapperUnitTest {
+
+ @Autowired
+ MediaService mediaService;
+
+ @MockitoBean
+ MediaSpringMapper mockMediaMapper;
+
+ @Test
+ public void whenMockedSpringMapperIsUsed_thenMockedValuesAreMapped() {
+ Media mockedMedia = new Media(12L, "title 12");
+ when(mockMediaMapper.toEntity(ArgumentMatchers.any())).thenReturn(mockedMedia);
+
+ MediaDto mediaDto = new MediaDto(1L, "title 1");
+ Media persisted = mediaService.persistMedia(mediaDto);
+
+ verify(mockMediaMapper).toEntity(mediaDto);
+ assertEquals(mockedMedia.getId(), persisted.getId());
+ assertEquals(mockedMedia.getTitle(), persisted.getTitle());
+ }
+
+}
diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/MediaSpringMapper.java b/mapstruct-2/src/test/java/com/baeldung/spring/MediaSpringMapper.java
new file mode 100644
index 000000000000..d752fee2291f
--- /dev/null
+++ b/mapstruct-2/src/test/java/com/baeldung/spring/MediaSpringMapper.java
@@ -0,0 +1,10 @@
+package com.baeldung.spring;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+
+import com.baeldung.mapper.MediaMapper;
+
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
+public interface MediaSpringMapper extends MediaMapper {
+}
diff --git a/messaging-modules/spring-apache-camel/pom.xml b/messaging-modules/spring-apache-camel/pom.xml
index 2eeeabf5e3d2..f3fe240e178e 100644
--- a/messaging-modules/spring-apache-camel/pom.xml
+++ b/messaging-modules/spring-apache-camel/pom.xml
@@ -8,6 +8,18 @@
jar
spring-apache-camel
http://maven.apache.org
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 11
+ 11
+
+
+
+
com.baeldung
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/CamelRoute.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/CamelRoute.java
new file mode 100644
index 000000000000..9fcd94e06b64
--- /dev/null
+++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/CamelRoute.java
@@ -0,0 +1,24 @@
+package com.baeldung.camel.producertemplate;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CamelRoute extends RouteBuilder {
+
+ @Override
+ public void configure() {
+ from("direct:start").log("Received: ${body}")
+ .transform(simple("Hello ${body}"));
+ from("direct:fileRoute").to("file://output?fileName=output.txt&fileExist=Append");
+ from("direct:beanRoute").bean(ProcessingBean.class, "process");
+
+ }
+
+ @Bean
+ public ProcessingBean processingBean() {
+ return new ProcessingBean();
+ }
+
+}
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProcessingBean.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProcessingBean.java
new file mode 100644
index 000000000000..dcb8ae011919
--- /dev/null
+++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProcessingBean.java
@@ -0,0 +1,9 @@
+package com.baeldung.camel.producertemplate;
+
+public class ProcessingBean {
+
+ public String process(String input) {
+ return "Bean processed " + input.toUpperCase();
+ }
+
+}
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateApplication.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateApplication.java
new file mode 100644
index 000000000000..6e7a90ce9e9c
--- /dev/null
+++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateApplication.java
@@ -0,0 +1,13 @@
+package com.baeldung.camel.producertemplate;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ProducerTemplateApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProducerTemplateApplication.class, args);
+ }
+
+}
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateController.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateController.java
new file mode 100644
index 000000000000..84a964df7d79
--- /dev/null
+++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateController.java
@@ -0,0 +1,33 @@
+package com.baeldung.camel.producertemplate;
+
+import org.apache.camel.ProducerTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class ProducerTemplateController {
+
+ @Autowired
+ private ProducerTemplate producerTemplate;
+
+ @GetMapping("/send/simple/{message}")
+ public String sendSimpleMessage(@PathVariable String message) {
+ String response = producerTemplate.requestBody("direct:start", message, String.class);
+ return response;
+ }
+
+ @GetMapping("/send/file/{message}")
+ public String sendToFile(@PathVariable String message) {
+ producerTemplate.sendBody("direct:fileRoute", message + "\n");
+ return "Message appended to output.txt";
+ }
+
+ @GetMapping("/send/bean/{message}")
+ public String sendToBean(@PathVariable String message) {
+ String response = producerTemplate.requestBody("direct:beanRoute", message, String.class);
+ return response;
+ }
+
+}
diff --git a/messaging-modules/spring-apache-camel/src/test/java/com/baeldung/producertemplate/ProducerTemplateIntegrationTest.java b/messaging-modules/spring-apache-camel/src/test/java/com/baeldung/producertemplate/ProducerTemplateIntegrationTest.java
new file mode 100644
index 000000000000..a3d0e4e579f0
--- /dev/null
+++ b/messaging-modules/spring-apache-camel/src/test/java/com/baeldung/producertemplate/ProducerTemplateIntegrationTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.producertemplate;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+
+import com.baeldung.camel.producertemplate.ProducerTemplateApplication;
+import com.baeldung.camel.producertemplate.ProducerTemplateController;
+
+@SpringBootTest(classes = ProducerTemplateApplication.class)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+public class ProducerTemplateIntegrationTest {
+
+ @Autowired
+ private ProducerTemplateController producerTemplateController;
+
+ private static final String TEST_MESSAGE = "TestMessage";
+ private static final Path OUTPUT_FILE = Paths.get("output/output.txt");
+
+ @BeforeEach
+ void setUp() throws IOException {
+
+ if (Files.exists(OUTPUT_FILE)) {
+ Files.delete(OUTPUT_FILE);
+ }
+ }
+
+ @Test
+ void givenMessage_whenSendingSimpleMessage_thenReturnsProcessedMessage() {
+ String inputMessage = TEST_MESSAGE;
+ String response = producerTemplateController.sendSimpleMessage(inputMessage);
+ assertNotNull(response, "Response should not be null");
+ assertEquals("Hello " + inputMessage, response);
+ }
+
+ @Test
+ void givenMessage_whenSendingToFile_thenFileContainsMessage() throws IOException {
+ String inputMessage = TEST_MESSAGE;
+ String response = producerTemplateController.sendToFile(inputMessage);
+
+ assertEquals("Message appended to output.txt", response);
+ assertTrue(Files.exists(OUTPUT_FILE));
+ String fileContent = Files.readString(OUTPUT_FILE);
+ assertTrue(fileContent.contains(inputMessage));
+ }
+
+ @Test
+ void givenMessage_whenSendingToBean_thenReturnsUppercaseMessage() {
+ String inputMessage = TEST_MESSAGE;
+ String response = producerTemplateController.sendToBean(inputMessage);
+ assertNotNull(response);
+ assertEquals("Bean processed " + inputMessage.toUpperCase(), response);
+ }
+
+}
diff --git a/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/DoubleCheckedSingleton.java b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/DoubleCheckedSingleton.java
new file mode 100644
index 000000000000..a0041fb68be6
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/DoubleCheckedSingleton.java
@@ -0,0 +1,18 @@
+package com.baeldung.threadsafe;
+
+public class DoubleCheckedSingleton {
+ private static volatile DoubleCheckedSingleton instance;
+
+ private DoubleCheckedSingleton() {}
+
+ public static DoubleCheckedSingleton getInstance() {
+ if (instance == null) {
+ synchronized (DoubleCheckedSingleton.class) {
+ if (instance == null) {
+ instance = new DoubleCheckedSingleton();
+ }
+ }
+ }
+ return instance;
+ }
+}
diff --git a/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/EagerSingleton.java b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/EagerSingleton.java
new file mode 100644
index 000000000000..57841dc016e4
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/EagerSingleton.java
@@ -0,0 +1,11 @@
+package com.baeldung.threadsafe;
+
+public class EagerSingleton {
+ private static final EagerSingleton INSTANCE = new EagerSingleton();
+
+ private EagerSingleton() {}
+
+ public static EagerSingleton getInstance() {
+ return INSTANCE;
+ }
+}
diff --git a/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/EnumSingleton.java b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/EnumSingleton.java
new file mode 100644
index 000000000000..60f8463be23e
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/EnumSingleton.java
@@ -0,0 +1,9 @@
+package com.baeldung.threadsafe;
+
+public enum EnumSingleton {
+ INSTANCE;
+
+ public void performOperation() {
+ // Singleton operations here
+ }
+}
\ No newline at end of file
diff --git a/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/SimpleSingleton.java b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/SimpleSingleton.java
new file mode 100644
index 000000000000..f0d853061c95
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/SimpleSingleton.java
@@ -0,0 +1,15 @@
+package com.baeldung.threadsafe;
+
+public class SimpleSingleton {
+ private static SimpleSingleton instance;
+
+ private SimpleSingleton() {
+ }
+
+ public static SimpleSingleton getInstance() {
+ if (instance == null) {
+ instance = new SimpleSingleton();
+ }
+ return instance;
+ }
+}
diff --git a/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/SynchronizedSingleton.java b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/SynchronizedSingleton.java
new file mode 100644
index 000000000000..c44dc78f8029
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/main/java/com/baeldung/threadsafe/SynchronizedSingleton.java
@@ -0,0 +1,14 @@
+package com.baeldung.threadsafe;
+
+public class SynchronizedSingleton {
+ private static SynchronizedSingleton instance;
+
+ private SynchronizedSingleton() {}
+
+ public static synchronized SynchronizedSingleton getInstance() {
+ if (instance == null) {
+ instance = new SynchronizedSingleton();
+ }
+ return instance;
+ }
+}
diff --git a/patterns-modules/design-patterns-singleton/src/test/java/com/baeldung/threadsafe/BillPughSingletonUnitTest.java b/patterns-modules/design-patterns-singleton/src/test/java/com/baeldung/threadsafe/BillPughSingletonUnitTest.java
new file mode 100644
index 000000000000..54cc2d7eefc8
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/test/java/com/baeldung/threadsafe/BillPughSingletonUnitTest.java
@@ -0,0 +1,28 @@
+package com.baeldung.threadsafe;
+
+import com.baledung.billpugh.BillPughSingleton;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+import java.util.concurrent.*;
+import java.util.Set;
+import java.util.HashSet;
+
+public class BillPughSingletonUnitTest {
+ @Test
+ void testThreadSafety() throws InterruptedException {
+ int numberOfThreads = 10;
+ CountDownLatch latch = new CountDownLatch(numberOfThreads);
+ Set instances = ConcurrentHashMap.newKeySet();
+
+ for (int i = 0; i < numberOfThreads; i++) {
+ new Thread(() -> {
+ instances.add(BillPughSingleton.getInstance());
+ latch.countDown();
+ }).start();
+ }
+
+ latch.await(5, TimeUnit.SECONDS);
+
+ assertEquals(1, instances.size(), "All threads should get the same instance");
+ }
+}
\ No newline at end of file
diff --git a/patterns-modules/design-patterns-singleton/src/test/java/com/baeldung/threadsafe/DoubleCheckedSingletonUnitTest.java b/patterns-modules/design-patterns-singleton/src/test/java/com/baeldung/threadsafe/DoubleCheckedSingletonUnitTest.java
new file mode 100644
index 000000000000..69c9a4457e85
--- /dev/null
+++ b/patterns-modules/design-patterns-singleton/src/test/java/com/baeldung/threadsafe/DoubleCheckedSingletonUnitTest.java
@@ -0,0 +1,20 @@
+package com.baeldung.threadsafe;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.stream.IntStream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class DoubleCheckedSingletonUnitTest {
+ @Test
+ void givenDCLSingleton_whenAccessedFromThreads_thenOneInstanceCreated() {
+ List
-
\ No newline at end of file
+
diff --git a/reactive-systems/order-service/Dockerfile b/reactive-systems/order-service/Dockerfile
index e48c19c2b1f8..606ce210e77b 100644
--- a/reactive-systems/order-service/Dockerfile
+++ b/reactive-systems/order-service/Dockerfile
@@ -1,3 +1,3 @@
-FROM openjdk:8-jdk-alpine
+FROM openjdk:17-jdk-alpine
COPY target/order-service-0.0.1-SNAPSHOT.jar app.jar
-ENTRYPOINT ["java","-jar","-Dspring.profiles.active=docker","/app.jar"]
\ No newline at end of file
+ENTRYPOINT ["java","-jar","-Dspring.profiles.active=docker","/app.jar"]
diff --git a/reactive-systems/order-service/pom.xml b/reactive-systems/order-service/pom.xml
index 6ef4a9dd8f98..207855ec5fc8 100644
--- a/reactive-systems/order-service/pom.xml
+++ b/reactive-systems/order-service/pom.xml
@@ -26,7 +26,6 @@
org.springframework.kafka
spring-kafka
- ${spring-kafka.version}
org.projectlombok
@@ -66,4 +65,4 @@
-
\ No newline at end of file
+
diff --git a/reactive-systems/pom.xml b/reactive-systems/pom.xml
index d84e07696d8e..0c669666c3ff 100644
--- a/reactive-systems/pom.xml
+++ b/reactive-systems/pom.xml
@@ -21,8 +21,4 @@
order-service
-
- 3.1.2
-
-
-
\ No newline at end of file
+
diff --git a/reactive-systems/shipping-service/Dockerfile b/reactive-systems/shipping-service/Dockerfile
index ff57bb953d9e..5650c854c341 100644
--- a/reactive-systems/shipping-service/Dockerfile
+++ b/reactive-systems/shipping-service/Dockerfile
@@ -1,3 +1,3 @@
-FROM openjdk:8-jdk-alpine
+FROM openjdk:17-jdk-alpine
COPY target/shipping-service-0.0.1-SNAPSHOT.jar app.jar
-ENTRYPOINT ["java","-jar","-Dspring.profiles.active=docker","/app.jar"]
\ No newline at end of file
+ENTRYPOINT ["java","-jar","-Dspring.profiles.active=docker","/app.jar"]
diff --git a/reactive-systems/shipping-service/pom.xml b/reactive-systems/shipping-service/pom.xml
index 888cd08c0c33..a10b5ab06703 100644
--- a/reactive-systems/shipping-service/pom.xml
+++ b/reactive-systems/shipping-service/pom.xml
@@ -22,7 +22,6 @@
org.springframework.kafka
spring-kafka
- ${spring-kafka.version}
com.fasterxml.jackson.core
@@ -66,4 +65,4 @@
-
\ No newline at end of file
+
diff --git a/spring-ai-3/pom.xml b/spring-ai-3/pom.xml
index 860ecc62148d..fdadf6cac0bc 100644
--- a/spring-ai-3/pom.xml
+++ b/spring-ai-3/pom.xml
@@ -73,6 +73,11 @@
spring-ai-spring-boot-testcontainers
test
+
+ org.testcontainers
+ junit-jupiter
+ test
+
org.testcontainers
chromadb
@@ -143,7 +148,7 @@
1.0.0-M7
5.9.0
3.1.1
- 3.4.5
+ 3.5.0
1.0.0-M6
1.0.0-M7
diff --git a/spring-ai-3/src/main/java/com/baeldung/springai/docker/modelrunner/ModelRunnerApplication.java b/spring-ai-3/src/main/java/com/baeldung/springai/docker/modelrunner/ModelRunnerApplication.java
new file mode 100644
index 000000000000..b4b95faa0ced
--- /dev/null
+++ b/spring-ai-3/src/main/java/com/baeldung/springai/docker/modelrunner/ModelRunnerApplication.java
@@ -0,0 +1,29 @@
+package com.baeldung.springai.docker.modelrunner;
+
+import org.springframework.ai.autoconfigure.chat.client.ChatClientAutoConfiguration;
+import org.springframework.ai.autoconfigure.mistralai.MistralAiAutoConfiguration;
+import org.springframework.ai.model.openai.autoconfigure.OpenAiAudioSpeechAutoConfiguration;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+
+
+@SpringBootApplication(exclude = {
+ ChatClientAutoConfiguration.class,
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class,
+ org.springframework.ai.autoconfigure.vectorstore.mongo.MongoDBAtlasVectorStoreAutoConfiguration.class,
+ org.springframework.ai.vectorstore.mongodb.autoconfigure.MongoDBAtlasVectorStoreAutoConfiguration.class,
+ OpenAiAudioSpeechAutoConfiguration.class,
+ MistralAiAutoConfiguration.class
+})
+class ModelRunnerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(ModelRunnerApplication.class);
+ app.setAdditionalProfiles("dockermodelrunner");
+ app.run(args);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-ai-3/src/main/java/com/baeldung/springai/docker/modelrunner/ModelRunnerController.java b/spring-ai-3/src/main/java/com/baeldung/springai/docker/modelrunner/ModelRunnerController.java
new file mode 100644
index 000000000000..5b8a1c9732fe
--- /dev/null
+++ b/spring-ai-3/src/main/java/com/baeldung/springai/docker/modelrunner/ModelRunnerController.java
@@ -0,0 +1,25 @@
+package com.baeldung.springai.docker.modelrunner;
+
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+class ModelRunnerController {
+
+ private final ChatClient chatClient;
+
+ public ModelRunnerController(ChatClient.Builder chatClientBuilder) {
+ this.chatClient = chatClientBuilder.build();
+ }
+
+ @GetMapping("/chat")
+ public String chat(@RequestParam("message") String message) {
+ return this.chatClient.prompt()
+ .user(message)
+ .call()
+ .content();
+ }
+
+}
\ No newline at end of file
diff --git a/spring-ai-3/src/main/resources/application-dockermodelrunner.properties b/spring-ai-3/src/main/resources/application-dockermodelrunner.properties
new file mode 100644
index 000000000000..d407a3b85a90
--- /dev/null
+++ b/spring-ai-3/src/main/resources/application-dockermodelrunner.properties
@@ -0,0 +1,5 @@
+spring.ai.openai.api-key=${OPENAI_API_KEY}
+spring.ai.openai.base-url=http://localhost:12434/engines
+spring.ai.openai.chat.options.model=ai/gemma3
+
+spring.docker.compose.enabled=false
\ No newline at end of file
diff --git a/spring-ai-3/src/test/java/com/baeldung/springai/docker/modelrunner/ModelRunnerApplicationManualTest.java b/spring-ai-3/src/test/java/com/baeldung/springai/docker/modelrunner/ModelRunnerApplicationManualTest.java
new file mode 100644
index 000000000000..a107ae9869d8
--- /dev/null
+++ b/spring-ai-3/src/test/java/com/baeldung/springai/docker/modelrunner/ModelRunnerApplicationManualTest.java
@@ -0,0 +1,46 @@
+package com.baeldung.springai.docker.modelrunner;
+
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.context.annotation.Import;
+import org.springframework.http.ResponseEntity;
+
+
+@Import(TestcontainersConfiguration.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class ModelRunnerApplicationManualTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ private String baseUrl;
+
+ @BeforeEach
+ void setUp() {
+ baseUrl = "http://localhost:" + port;
+ }
+
+ @Test
+ void givenMessage_whenCallChatController_thenSuccess() {
+ // given
+ String userMessage = "Hello, how are you?";
+
+ // when
+ ResponseEntity response = restTemplate.getForEntity(
+ baseUrl + "/chat?message=" + userMessage, String.class);
+
+ // then
+ assertThat(response.getStatusCode().is2xxSuccessful()).isTrue();
+ assertThat(response.getBody()).isNotEmpty();
+ }
+
+}
diff --git a/spring-ai-3/src/test/java/com/baeldung/springai/docker/modelrunner/TestcontainersConfiguration.java b/spring-ai-3/src/test/java/com/baeldung/springai/docker/modelrunner/TestcontainersConfiguration.java
new file mode 100644
index 000000000000..b72f27518914
--- /dev/null
+++ b/spring-ai-3/src/test/java/com/baeldung/springai/docker/modelrunner/TestcontainersConfiguration.java
@@ -0,0 +1,24 @@
+package com.baeldung.springai.docker.modelrunner;
+
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.test.context.DynamicPropertyRegistrar;
+import org.testcontainers.containers.DockerModelRunnerContainer;
+
+@TestConfiguration(proxyBeanMethods = false)
+class TestcontainersConfiguration {
+
+ @Bean
+ DockerModelRunnerContainer socat() {
+ return new DockerModelRunnerContainer("alpine/socat:1.8.0.1");
+ }
+
+ @Bean
+ DynamicPropertyRegistrar properties(DockerModelRunnerContainer dmr) {
+ return (registrar) -> {
+ registrar.add("spring.ai.openai.base-url", dmr::getOpenAIEndpoint);
+ registrar.add("spring.ai.openai.api-key", () -> "test-api-key");
+ registrar.add("spring.ai.openai.chat.options.model", () -> "ai/gemma3");
+ };
+ }
+}
diff --git a/spring-ai-4/pom.xml b/spring-ai-4/pom.xml
new file mode 100644
index 000000000000..ac2466af39f8
--- /dev/null
+++ b/spring-ai-4/pom.xml
@@ -0,0 +1,119 @@
+
+
+ 4.0.0
+ spring-ai-4
+ 0.0.1
+ jar
+ spring-ai-4
+
+
+ com.baeldung
+ parent-boot-3
+ 0.0.1-SNAPSHOT
+ ../parent-boot-3
+
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+ true
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+ org.springframework.ai
+ spring-ai-bom
+ ${spring-ai.version}
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.ai
+ spring-ai-starter-model-openai
+
+
+ org.springframework.ai
+ spring-ai-model-chat-memory-repository-jdbc
+
+
+ org.hsqldb
+ hsqldb
+ runtime
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ chat-memory
+
+ true
+
+
+ com.baeldung.springai.memory.Application
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ ${spring.boot.mainclass}
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 21
+
+
+
+
+
+
+ 5.9.0
+ 3.5.0
+ 1.0.0
+
+
+
diff --git a/spring-ai-4/src/main/java/com/baeldung/springai/memory/Application.java b/spring-ai-4/src/main/java/com/baeldung/springai/memory/Application.java
new file mode 100644
index 000000000000..5cdaa360c6bc
--- /dev/null
+++ b/spring-ai-4/src/main/java/com/baeldung/springai/memory/Application.java
@@ -0,0 +1,15 @@
+package com.baeldung.springai.memory;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(Application.class);
+ app.setAdditionalProfiles("memory");
+ app.run(args);
+ }
+
+}
diff --git a/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatConfig.java b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatConfig.java
new file mode 100644
index 000000000000..a44f8f7d0739
--- /dev/null
+++ b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatConfig.java
@@ -0,0 +1,21 @@
+package com.baeldung.springai.memory;
+
+import org.springframework.ai.chat.memory.ChatMemoryRepository;
+import org.springframework.ai.chat.memory.repository.jdbc.HsqldbChatMemoryRepositoryDialect;
+import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+@Configuration
+public class ChatConfig {
+
+ @Bean
+ public ChatMemoryRepository getChatMemoryRepository(JdbcTemplate jdbcTemplate) {
+ return JdbcChatMemoryRepository.builder()
+ .jdbcTemplate(jdbcTemplate)
+ .dialect(new HsqldbChatMemoryRepositoryDialect())
+ .build();
+ }
+
+}
diff --git a/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatController.java b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatController.java
new file mode 100644
index 000000000000..f860eea77ca0
--- /dev/null
+++ b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatController.java
@@ -0,0 +1,25 @@
+package com.baeldung.springai.memory;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@RestController
+public class ChatController {
+
+ private final ChatService chatService;
+
+ public ChatController(ChatService chatService) {
+ this.chatService = chatService;
+ }
+
+ @PostMapping("/chat")
+ public ResponseEntity chat(@RequestBody @Valid ChatRequest request) {
+ String response = chatService.chat(request.getPrompt());
+ return ResponseEntity.ok(response);
+ }
+
+}
diff --git a/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatRequest.java b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatRequest.java
new file mode 100644
index 000000000000..cedefe07fa35
--- /dev/null
+++ b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatRequest.java
@@ -0,0 +1,18 @@
+package com.baeldung.springai.memory;
+
+import javax.validation.constraints.NotNull;
+
+public class ChatRequest {
+
+ @NotNull
+ private String prompt;
+
+ public String getPrompt() {
+ return prompt;
+ }
+
+ public void setPrompt(String prompt) {
+ this.prompt = prompt;
+ }
+
+}
diff --git a/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatService.java b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatService.java
new file mode 100644
index 000000000000..64fc63acca79
--- /dev/null
+++ b/spring-ai-4/src/main/java/com/baeldung/springai/memory/ChatService.java
@@ -0,0 +1,38 @@
+package com.baeldung.springai.memory;
+
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
+import org.springframework.ai.chat.memory.ChatMemory;
+import org.springframework.ai.chat.model.ChatModel;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.annotation.SessionScope;
+
+import java.util.UUID;
+
+@Component
+@SessionScope
+public class ChatService {
+
+ private final ChatClient chatClient;
+ private final String conversationId;
+
+ public ChatService(ChatModel chatModel, ChatMemory chatMemory) {
+ this.chatClient = ChatClient.builder(chatModel)
+ .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
+ .build();
+ this.conversationId = UUID.randomUUID().toString();
+ }
+
+ public String getConversationId() {
+ return conversationId;
+ }
+
+ public String chat(String prompt) {
+ return chatClient.prompt()
+ .user(userMessage -> userMessage.text(prompt))
+ .advisors(a -> a.param(ChatMemory.CONVERSATION_ID, conversationId))
+ .call()
+ .content();
+ }
+
+}
diff --git a/spring-ai-4/src/main/resources/application-memory.yml b/spring-ai-4/src/main/resources/application-memory.yml
new file mode 100644
index 000000000000..a0531b4eab58
--- /dev/null
+++ b/spring-ai-4/src/main/resources/application-memory.yml
@@ -0,0 +1,15 @@
+spring:
+ ai:
+ openai:
+ api-key: ""
+
+ datasource:
+ url: jdbc:hsqldb:mem:chatdb
+ driver-class-name: org.hsqldb.jdbc.JDBCDriver
+ username: sa
+ password:
+
+ sql:
+ init:
+ mode: always
+ schema-locations: classpath:org/springframework/ai/chat/memory/repository/jdbc/schema-hsqldb.sql
diff --git a/spring-ai-4/src/main/resources/logback.xml b/spring-ai-4/src/main/resources/logback.xml
new file mode 100644
index 000000000000..449efbdaebb0
--- /dev/null
+++ b/spring-ai-4/src/main/resources/logback.xml
@@ -0,0 +1,15 @@
+
+
+
+ [%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c{1}] - %m%n
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-ai-4/src/test/java/com/baeldung/springai/memory/ChatServiceLiveTest.java b/spring-ai-4/src/test/java/com/baeldung/springai/memory/ChatServiceLiveTest.java
new file mode 100644
index 000000000000..c96024846a92
--- /dev/null
+++ b/spring-ai-4/src/test/java/com/baeldung/springai/memory/ChatServiceLiveTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.springai.memory;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.ai.chat.memory.ChatMemory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest
+@ActiveProfiles("memory")
+class ChatServiceLiveTest {
+
+ private static final String PROMPT_1ST = "Tell me a joke";
+ private static final String PROMPT_2ND = "Tell me another one";
+
+ @Autowired
+ private ChatMemory chatMemory;
+
+ @Autowired
+ private ChatService chatService;
+
+ @Test
+ void whenChatServiceIsCalledTwice_thenChatMemoryHasCorrectNumberOfEntries() {
+ String conversationId = chatService.getConversationId();
+
+ // 1st request
+ String response1 = chatService.chat(PROMPT_1ST);
+ assertThat(response1).isNotEmpty();
+ assertThat(chatMemory.get(conversationId)).hasSize(2);
+
+ // 2nd request
+ String response2 = chatService.chat(PROMPT_2ND);
+ assertThat(response2).isNotEmpty();
+ assertThat(chatMemory.get(conversationId)).hasSize(4);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-batch-2/src/test/java/com/baeldung/multiprocessorandwriter/BatchJobIntegrationTest.java b/spring-batch-2/src/test/java/com/baeldung/multiprocessorandwriter/BatchJobIntegrationTest.java
index 223f4d14f645..8afac6c7db74 100644
--- a/spring-batch-2/src/test/java/com/baeldung/multiprocessorandwriter/BatchJobIntegrationTest.java
+++ b/spring-batch-2/src/test/java/com/baeldung/multiprocessorandwriter/BatchJobIntegrationTest.java
@@ -10,6 +10,8 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@@ -83,7 +85,14 @@ public JobLauncherTestUtils jobLauncherTestUtils() {
@BeforeEach
public void setup() throws IOException {
try (Connection connection = dataSource.getConnection()) {
- ScriptUtils.executeSqlScript(connection, new ClassPathResource("org/springframework/batch/core/schema-h2.sql"));
+ DatabaseMetaData metaData = connection.getMetaData();
+ try (ResultSet rs = metaData.getTables(null, null, "BATCH_JOB_INSTANCE", null)) {
+ if (!rs.next()) {
+ ScriptUtils.executeSqlScript(connection, new ClassPathResource("org/springframework/batch/core/schema-h2.sql"));
+ } else {
+ System.out.println("Spring Batch tables already exist. Skipping schema creation.");
+ }
+ }
} catch (SQLException e) {
throw new RuntimeException(e);
}
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/GraphqlPagination.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/GraphqlPagination.java
new file mode 100644
index 000000000000..2e78dd51c25e
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/GraphqlPagination.java
@@ -0,0 +1,12 @@
+package com.baeldung.pagination;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class GraphqlPagination {
+ public static void main(String[] args) {
+ SpringApplication.run(GraphqlPagination.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookConnection.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookConnection.java
new file mode 100644
index 000000000000..c0db70b69fcb
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookConnection.java
@@ -0,0 +1,16 @@
+package com.baeldung.pagination.dto;
+
+import lombok.Getter;
+
+import java.util.List;
+
+@Getter
+public class BookConnection {
+ private final List edges;
+ private final PageInfo pageInfo;
+
+ public BookConnection(List edges, PageInfo pageInfo) {
+ this.edges = edges;
+ this.pageInfo = pageInfo;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookEdge.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookEdge.java
new file mode 100644
index 000000000000..d688aad172c6
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookEdge.java
@@ -0,0 +1,16 @@
+package com.baeldung.pagination.dto;
+
+import com.baeldung.pagination.entity.Book;
+
+import lombok.Getter;
+
+@Getter
+public class BookEdge {
+ private final Book node;
+ private final String cursor;
+
+ public BookEdge(Book node, String cursor) {
+ this.node = node;
+ this.cursor = cursor;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookPage.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookPage.java
new file mode 100644
index 000000000000..34d704342f93
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/BookPage.java
@@ -0,0 +1,25 @@
+package com.baeldung.pagination.dto;
+
+import lombok.Getter;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+import com.baeldung.pagination.entity.Book;
+
+@Getter
+public class BookPage {
+ private final List content;
+ private final int totalPages;
+ private final long totalElements;
+ private final int number;
+ private final int size;
+
+ public BookPage(Page page) {
+ this.content = page.getContent();
+ this.totalPages = page.getTotalPages();
+ this.totalElements = page.getTotalElements();
+ this.number = page.getNumber();
+ this.size = page.getSize();
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/PageInfo.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/PageInfo.java
new file mode 100644
index 000000000000..850b05de5b62
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/dto/PageInfo.java
@@ -0,0 +1,14 @@
+package com.baeldung.pagination.dto;
+
+import lombok.Getter;
+
+@Getter
+public class PageInfo {
+ private final boolean hasNextPage;
+ private final String endCursor;
+
+ public PageInfo(boolean hasNextPage, String endCursor) {
+ this.hasNextPage = hasNextPage;
+ this.endCursor = endCursor;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/entity/Book.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/entity/Book.java
new file mode 100644
index 000000000000..465bf1db2816
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/entity/Book.java
@@ -0,0 +1,42 @@
+package com.baeldung.pagination.entity;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.Getter;
+import lombok.Setter;
+
+@Entity
+public class Book {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ private String title;
+ private String author;
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public String getTitle() {
+ return this.title;
+ }
+
+ public String getAuthor() {
+ return this.author;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/repository/BookRepository.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/repository/BookRepository.java
new file mode 100644
index 000000000000..e506fd2104e1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/repository/BookRepository.java
@@ -0,0 +1,16 @@
+package com.baeldung.pagination.repository;
+
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+import com.baeldung.pagination.entity.Book;
+
+@Repository
+public interface BookRepository extends PagingAndSortingRepository, CrudRepository {
+ List findByIdGreaterThanOrderByIdAsc(Long cursor, org.springframework.data.domain.Pageable pageable);
+ List findAllByOrderByIdAsc(org.springframework.data.domain.Pageable pageable);
+ boolean existsByIdGreaterThan(Long id);
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/resolver/BookQueryResolver.java b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/resolver/BookQueryResolver.java
new file mode 100644
index 000000000000..fee56ae90974
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/java/com/baeldung/pagination/resolver/BookQueryResolver.java
@@ -0,0 +1,56 @@
+package com.baeldung.pagination.resolver;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.graphql.data.method.annotation.Argument;
+import org.springframework.graphql.data.method.annotation.QueryMapping;
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import com.baeldung.pagination.dto.BookConnection;
+import com.baeldung.pagination.dto.BookEdge;
+import com.baeldung.pagination.dto.BookPage;
+import com.baeldung.pagination.dto.PageInfo;
+import com.baeldung.pagination.entity.Book;
+import com.baeldung.pagination.repository.BookRepository;
+
+@Controller
+public class BookQueryResolver {
+ private final BookRepository bookRepository;
+
+ public BookQueryResolver(BookRepository bookRepository) {
+ this.bookRepository = bookRepository;
+ }
+
+ @QueryMapping
+ public BookPage books(@Argument int page, @Argument int size) {
+ Pageable pageable = PageRequest.of(page, size);
+ Page bookPage = bookRepository.findAll(pageable);
+ return new BookPage(bookPage);
+ }
+
+ @QueryMapping
+ public BookConnection booksByCursor(@Argument Optional cursor, @Argument int limit) {
+ List books;
+
+ if (cursor.isPresent()) {
+ books = bookRepository.findByIdGreaterThanOrderByIdAsc(cursor.get(), PageRequest.of(0, limit));
+ } else {
+ books = bookRepository.findAllByOrderByIdAsc(PageRequest.of(0, limit));
+ }
+
+ List edges = books.stream()
+ .map(book -> new BookEdge(book, book.getId().toString()))
+ .collect(Collectors.toList());
+ String endCursor = books.isEmpty() ? null : books.get(books.size() - 1).getId().toString();
+ boolean hasNextPage = !books.isEmpty() && bookRepository.existsByIdGreaterThan(books.get(books.size() - 1).getId());
+
+ PageInfo pageInfo = new PageInfo(hasNextPage, endCursor);
+
+ return new BookConnection(edges, pageInfo);
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/resources/application-pagination.yml b/spring-boot-modules/spring-boot-graphql-2/src/main/resources/application-pagination.yml
new file mode 100644
index 000000000000..93ea6bd559aa
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/resources/application-pagination.yml
@@ -0,0 +1,23 @@
+spring:
+ datasource:
+ url: jdbc:h2:mem:testdb # H2 in-memory DB
+ username: sa
+ password: password
+ driver-class-name: org.h2.Driver
+ h2:
+ console:
+ enabled: true
+ path: /h2-console
+ jpa:
+ hibernate:
+ ddl-auto: update
+ show-sql: false
+ properties:
+ hibernate.format_sql: true
+
+ graphql:
+ servlet:
+ enabled: true
+ path: /graphql
+ schema:
+ locations: classpath:pagination/
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/main/resources/pagination/schema.graphqls b/spring-boot-modules/spring-boot-graphql-2/src/main/resources/pagination/schema.graphqls
new file mode 100644
index 000000000000..2e19b385f61e
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/main/resources/pagination/schema.graphqls
@@ -0,0 +1,33 @@
+type Book {
+ id: ID!
+ title: String
+ author: String
+}
+
+type BookPage {
+ content: [Book]
+ totalPages: Int
+ totalElements: Int
+ number: Int
+ size: Int
+}
+
+type BookEdge {
+ node: Book
+ cursor: String
+}
+
+type PageInfo {
+ hasNextPage: Boolean
+ endCursor: String
+}
+
+type BookConnection {
+ edges: [BookEdge]
+ pageInfo: PageInfo
+}
+
+type Query {
+ books(page: Int, size: Int): BookPage
+ booksByCursor(cursor: ID, limit: Int!): BookConnection
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-graphql-2/src/test/java/com/baeldung/pagination/GraphqlPaginationIntegrationTest.java b/spring-boot-modules/spring-boot-graphql-2/src/test/java/com/baeldung/pagination/GraphqlPaginationIntegrationTest.java
new file mode 100644
index 000000000000..0c61292b55ad
--- /dev/null
+++ b/spring-boot-modules/spring-boot-graphql-2/src/test/java/com/baeldung/pagination/GraphqlPaginationIntegrationTest.java
@@ -0,0 +1,202 @@
+package com.baeldung.pagination;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.graphql.tester.AutoConfigureGraphQlTester;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.graphql.test.tester.GraphQlTester;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.web.reactive.server.WebTestClient;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baeldung.pagination.entity.Book;
+import com.baeldung.pagination.repository.BookRepository;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@AutoConfigureMockMvc
+@AutoConfigureGraphQlTester
+@ActiveProfiles("pagination")
+class GraphqlPaginationIntegrationTest {
+
+ @Autowired
+ private GraphQlTester graphQlTester;
+
+ @Autowired
+ private WebTestClient webTestClient;
+
+ @Autowired
+ private BookRepository bookRepository;
+
+ @BeforeEach
+ void setup() {
+ bookRepository.deleteAll();
+
+ for (int i = 1; i <= 50; i++) {
+ Book book = new Book();
+ book.setTitle("Test Book " + i);
+ book.setAuthor("Test Author " + i);
+ bookRepository.save(book);
+ }
+ }
+
+ @Test
+ void givenPageAndSize_whenQueryBooks_thenShouldReturnCorrectPage() {
+ String query = """
+ query {
+ books(page: 0, size: 5) {
+ content {
+ id
+ title
+ author
+ }
+ totalPages
+ totalElements
+ number
+ size
+ }
+ }
+ """;
+
+ graphQlTester.document(query)
+ .execute()
+ .path("data.books")
+ .entity(BookPageResponse.class)
+ .satisfies(bookPage -> {
+ assertEquals(5, bookPage.getContent().size());
+ assertEquals(0, bookPage.getNumber());
+ assertEquals(5, bookPage.getSize());
+ assertEquals(50, bookPage.getTotalElements());
+ assertEquals(10, bookPage.getTotalPages());
+ });
+ }
+
+ @Test
+ void givenCursorAndLimit_whenQueryBooksByCursor_thenShouldReturnNextBatch() {
+ // First page
+ String firstPageQuery = """
+ query {
+ booksByCursor(limit: 5) {
+ edges {
+ node {
+ id
+ }
+ cursor
+ }
+ pageInfo {
+ endCursor
+ hasNextPage
+ }
+ }
+ }
+ """;
+
+ BookConnectionResponse firstPage = graphQlTester.document(firstPageQuery)
+ .execute()
+ .path("data.booksByCursor")
+ .entity(BookConnectionResponse.class)
+ .get();
+
+ assertEquals(5, firstPage.getEdges().size());
+ assertTrue(firstPage.getPageInfo().isHasNextPage());
+ assertNotNull(firstPage.getPageInfo().getEndCursor());
+
+ // Second page
+ String secondPageQuery = String.format("""
+ query {
+ booksByCursor(cursor: "%s", limit: 5) {
+ edges {
+ node {
+ id
+ }
+ }
+ pageInfo {
+ hasNextPage
+ }
+ }
+ }
+ """, firstPage.getPageInfo().getEndCursor());
+
+ graphQlTester.document(secondPageQuery)
+ .execute()
+ .path("data.booksByCursor")
+ .entity(BookConnectionResponse.class)
+ .satisfies(secondPage -> {
+ assertEquals(5, secondPage.getEdges().size());
+ assertTrue(secondPage.getPageInfo().isHasNextPage());
+ });
+ }
+
+ private static class BookPageResponse {
+ private List content;
+ private int totalPages;
+ private long totalElements;
+ private int number;
+ private int size;
+
+ public List getContent() {
+ return content;
+ }
+
+ public int getTotalPages() {
+ return totalPages;
+ }
+
+ public long getTotalElements() {
+ return totalElements;
+ }
+
+ public int getNumber() {
+ return number;
+ }
+
+ public int getSize() {
+ return size;
+ }
+ }
+
+ private static class BookConnectionResponse {
+ private List edges;
+ private PageInfoResponse pageInfo;
+
+ public List getEdges() {
+ return edges;
+ }
+
+ public PageInfoResponse getPageInfo() {
+ return pageInfo;
+ }
+ }
+
+ private static class BookEdgeResponse {
+ private Book node;
+ private String cursor;
+
+ public Book getNode() {
+ return node;
+ }
+
+ public String getCursor() {
+ return cursor;
+ }
+ }
+
+ private static class PageInfoResponse {
+ private boolean hasNextPage;
+ private String endCursor;
+
+ public boolean isHasNextPage() {
+ return hasNextPage;
+ }
+
+ public String getEndCursor() {
+ return endCursor;
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-libraries-2/pom.xml b/spring-boot-modules/spring-boot-libraries-2/pom.xml
index ffd535983cbe..945f86eba7cc 100644
--- a/spring-boot-modules/spring-boot-libraries-2/pom.xml
+++ b/spring-boot-modules/spring-boot-libraries-2/pom.xml
@@ -11,18 +11,6 @@
1.0.0-SNAPSHOT
-
-
-
- org.springframework.modulith
- spring-modulith-bom
- ${spring-modulith-bom.version}
- import
- pom
-
-
-
-
org.springframework.boot
@@ -36,10 +24,6 @@
org.springframework.boot
spring-boot-starter-actuator
-
- ch.qos.logback
- logback-classic
-
org.springframework.data
spring-data-jpa
@@ -54,22 +38,6 @@
jobrunr-spring-boot-starter
${jobrunr-spring-boot-starter.version}
-
-
- org.openapitools
- openapi-generator
- ${openapi-generator.version}
-
-
- org.openapitools
- jackson-databind-nullable
- ${jackson-databind-nullable.version}
-
-
- org.springdoc
- springdoc-openapi-ui
- ${springdoc.version}
-
org.springframework.boot
spring-boot-starter-test
@@ -91,62 +59,49 @@
jandex
${jandex.version}
+
- io.github.resilience4j
- resilience4j-spring-boot2
- ${resilience4j-spring-boot2.version}
+ org.zalando
+ problem-spring-web
+ ${problem-spring-web.version}
-
- com.github.tomakehurst
- wiremock-jre8
- ${wiremock-jre8.version}
- test
+ org.zalando
+ jackson-datatype-problem
+ ${jackson-datatype-problem.version}
- org.springframework.modulith
- spring-modulith-api
+ org.springframework.boot
+ spring-boot-starter-security
+
- org.springframework.modulith
- spring-modulith-starter-test
- test
+ org.togglz
+ togglz-spring-boot-starter
+ ${togglz.version}
+
+
+ org.togglz
+ togglz-spring-security
+ ${togglz.version}
+
+
+ jakarta.persistence
+ jakarta.persistence-api
+ ${jakarta.persistence-api.version}
+
+
+ com.h2database
+ h2
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
-
- org.openapitools
- openapi-generator-maven-plugin
- ${openapi-generator.version}
-
-
-
- generate
-
-
-
- ${project.basedir}/src/main/resources/petstore.yml
-
- spring
- com.baeldung.openapi.api
- com.baeldung.openapi.model
- true
- true
- true
-
- ApiUtil.java
-
-
- false
- true
-
-
-
-
-
-
org.jboss.jandex
jandex-maven-plugin
@@ -172,20 +127,16 @@
- 1.2.2
5.1.7
4.0.3
- 7.8.0
- 2.4.5
- 0.2.1
0.10.2
2.4.3.Final
- 2.0.2
- 2.34.0
1.2.3
- 1.7.0
- com.baeldung.openapi.OpenApiApplication
- 3.2.2
+ com.baeldung.kong.StockApp
+ 0.29.1
+ 0.27.1
+ 4.4.0
+ 3.1.0
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java
similarity index 96%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java
index 50f1ad5137c1..d04cd237d363 100644
--- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java
+++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java
@@ -6,6 +6,7 @@
import java.util.Map;
import org.springframework.http.MediaType;
+//import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/dto/Task.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/dto/Task.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/dto/Task.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/dto/Task.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/Employee.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/Employee.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/Employee.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/Employee.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/EmployeeRepository.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/EmployeeRepository.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/EmployeeRepository.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/EmployeeRepository.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/FeatureAssociation.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/FeatureAssociation.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/FeatureAssociation.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/FeatureAssociation.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/FeaturesAspect.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/FeaturesAspect.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/FeaturesAspect.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/FeaturesAspect.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/MyFeatures.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/MyFeatures.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/MyFeatures.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/MyFeatures.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/SalaryController.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/SalaryController.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/SalaryController.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/SalaryController.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/SalaryService.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/SalaryService.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/SalaryService.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/SalaryService.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/ToggleApplication.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/ToggleApplication.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/ToggleApplication.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/ToggleApplication.java
index 9a237261af1e..223425bfbc2e 100644
--- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/ToggleApplication.java
+++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/ToggleApplication.java
@@ -1,10 +1,10 @@
package com.baeldung.toggle;
-import jakarta.annotation.security.RolesAllowed;
-
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import jakarta.annotation.security.RolesAllowed;
+
@SpringBootApplication
public class ToggleApplication {
@RolesAllowed("*")
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/ToggleConfiguration.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/ToggleConfiguration.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/toggle/ToggleConfiguration.java
rename to spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/toggle/ToggleConfiguration.java
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/resources/application-problem.properties b/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application-problem.properties
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/main/resources/application-problem.properties
rename to spring-boot-modules/spring-boot-libraries-2/src/main/resources/application-problem.properties
diff --git a/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java
rename to spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/toggle/TestTogglzConfig.java b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/toggle/TestTogglzConfig.java
new file mode 100644
index 000000000000..d6aca0281e0c
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/toggle/TestTogglzConfig.java
@@ -0,0 +1,24 @@
+package com.baeldung.toggle;
+
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.togglz.core.manager.FeatureManager;
+import org.togglz.core.manager.FeatureManagerBuilder;
+import org.togglz.core.repository.mem.InMemoryStateRepository;
+import org.togglz.core.user.NoOpUserProvider;
+import org.togglz.core.context.StaticFeatureManagerProvider;
+
+
+@TestConfiguration
+public class TestTogglzConfig {
+ @Bean
+ public FeatureManager featureManager() {
+ FeatureManager manager = new FeatureManagerBuilder()
+ .featureEnum(MyFeatures.class)
+ .stateRepository(new InMemoryStateRepository())
+ .userProvider(new NoOpUserProvider())
+ .build();
+ StaticFeatureManagerProvider.setFeatureManager(manager);
+ return manager;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
similarity index 97%
rename from spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
rename to spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
index 3213a10df961..decf980a9ac0 100644
--- a/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
@@ -16,7 +16,7 @@
import org.springframework.web.context.WebApplicationContext;
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = ToggleApplication.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = {ToggleApplication.class, TestTogglzConfig.class})
@AutoConfigureMockMvc
public class ToggleIntegrationTest {
diff --git a/spring-boot-modules/spring-boot-libraries/pom.xml b/spring-boot-modules/spring-boot-libraries/pom.xml
index 5f4e997051ab..cc856f47c2aa 100644
--- a/spring-boot-modules/spring-boot-libraries/pom.xml
+++ b/spring-boot-modules/spring-boot-libraries/pom.xml
@@ -13,7 +13,29 @@
1.0.0-SNAPSHOT
+
+
+
+ org.springframework.modulith
+ spring-modulith-bom
+ ${spring-modulith-bom.version}
+ import
+ pom
+
+
+
+
+
+
+ org.springframework.modulith
+ spring-modulith-api
+
+
+ org.springframework.modulith
+ spring-modulith-starter-test
+ test
+
org.springframework.boot
spring-boot-starter-web
@@ -39,28 +61,6 @@
spring-boot-starter-test
test
-
-
- org.togglz
- togglz-spring-boot-starter
- ${togglz.version}
-
-
- org.togglz
- togglz-spring-security
- ${togglz.version}
-
-
-
- org.zalando
- problem-spring-web
- ${problem-spring-web.version}
-
-
- org.zalando
- jackson-datatype-problem
- ${jackson-datatype-problem.version}
-
net.javacrumbs.shedlock
@@ -142,6 +142,44 @@
qrcodegen
${qrcodegen.version}
+
+ io.github.resilience4j
+ resilience4j-spring-boot2
+ ${resilience4j-spring-boot2.version}
+
+
+
+ com.github.tomakehurst
+ wiremock-jre8
+ ${wiremock-jre8.version}
+ test
+
+
+
+ org.openapitools
+ openapi-generator
+ ${openapi-generator.version}
+
+
+ org.slf4j
+ slf4j-simple
+
+
+
+
+ org.openapitools
+ jackson-databind-nullable
+ ${jackson-databind-nullable.version}
+
+
+ org.springdoc
+ springdoc-openapi-ui
+ ${springdoc.version}
+
+
+ ch.qos.logback
+ logback-classic
+
@@ -189,6 +227,37 @@
${project.build.outputDirectory}/git.properties
+
+ org.openapitools
+ openapi-generator-maven-plugin
+ ${openapi-generator.version}
+
+
+
+ generate
+
+
+
+ ${project.basedir}/src/main/resources/petstore.yml
+
+ spring
+ com.baeldung.openapi.api
+ com.baeldung.openapi.model
+ true
+ true
+ true
+
+ ApiUtil.java
+
+
+ false
+ true
+ true
+
+
+
+
+
@@ -231,15 +300,12 @@
-
- com.baeldung.graphql.DemoApplication
- 4.4.0
+ com.baeldung.openapi.OpenApiApplication
+ 1.2.2
1.9.0
5.2.4
2.2.4
3.2.0
- 0.29.1
- 0.27.1
6.3.1
1.5-beta1
2.1
@@ -250,6 +316,11 @@
3.1.8
0.4.6
1.8.0
+ 2.0.2
+ 2.34.0
+ 7.8.0
+ 1.7.0
+ 0.2.1
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/Application.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/Application.java
similarity index 99%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/Application.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/Application.java
index c2d26ab955df..32b8bf7316be 100644
--- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/Application.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/Application.java
@@ -1,12 +1,13 @@
package com.baeldung.modulith;
-import com.baeldung.modulith.product.ProductDto;
-import com.baeldung.modulith.product.ProductService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
+import com.baeldung.modulith.product.ProductDto;
+import com.baeldung.modulith.product.ProductService;
+
@EnableAsync
@SpringBootApplication
@EnableAutoConfiguration
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/NotificationDTO.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/NotificationDTO.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/NotificationDTO.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/NotificationDTO.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/NotificationService.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/NotificationService.java
similarity index 99%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/NotificationService.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/NotificationService.java
index f356b9eaa6ab..0d60f9a203b3 100644
--- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/NotificationService.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/NotificationService.java
@@ -1,12 +1,13 @@
package com.baeldung.modulith.notification;
-import com.baeldung.modulith.notification.internal.Notification;
-import com.baeldung.modulith.notification.internal.NotificationType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.modulith.ApplicationModuleListener;
import org.springframework.stereotype.Service;
+import com.baeldung.modulith.notification.internal.Notification;
+import com.baeldung.modulith.notification.internal.NotificationType;
+
@Service
public class NotificationService {
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/internal/Notification.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/internal/Notification.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/internal/Notification.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/internal/Notification.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/internal/NotificationType.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/internal/NotificationType.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/notification/internal/NotificationType.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/notification/internal/NotificationType.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/ProductDto.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/ProductDto.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/ProductDto.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/ProductDto.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/ProductService.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/ProductService.java
similarity index 99%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/ProductService.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/ProductService.java
index 39bb09de6473..9c9a0797cd8e 100644
--- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/ProductService.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/ProductService.java
@@ -1,12 +1,13 @@
package com.baeldung.modulith.product;
-import com.baeldung.modulith.notification.NotificationDTO;
-import com.baeldung.modulith.notification.NotificationService;
-import com.baeldung.modulith.product.internal.Product;
+import java.util.Date;
+
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
-import java.util.Date;
+import com.baeldung.modulith.notification.NotificationDTO;
+import com.baeldung.modulith.notification.NotificationService;
+import com.baeldung.modulith.product.internal.Product;
@Service
public class ProductService {
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/internal/Product.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/internal/Product.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/modulith/product/internal/Product.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/modulith/product/internal/Product.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/OpenApiApplication.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/openapi/OpenApiApplication.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/OpenApiApplication.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/openapi/OpenApiApplication.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ApiExceptionHandler.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ApiExceptionHandler.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ApiExceptionHandler.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ApiExceptionHandler.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ExternalAPICaller.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ExternalAPICaller.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ExternalAPICaller.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ExternalAPICaller.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ExternalApiCallerConfig.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ExternalApiCallerConfig.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ExternalApiCallerConfig.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ExternalApiCallerConfig.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ResilientApp.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ResilientApp.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ResilientApp.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ResilientApp.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ResilientAppController.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ResilientAppController.java
similarity index 99%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ResilientAppController.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ResilientAppController.java
index 0b99f7cec0c1..bb80b4f298ad 100644
--- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/resilientapp/ResilientAppController.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/resilientapp/ResilientAppController.java
@@ -3,7 +3,6 @@
import java.util.concurrent.CompletableFuture;
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/resources/petstore.yml b/spring-boot-modules/spring-boot-libraries/src/main/resources/petstore.yml
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/main/resources/petstore.yml
rename to spring-boot-modules/spring-boot-libraries/src/main/resources/petstore.yml
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/modulith/ApplicationModularityUnitTest.java b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/modulith/ApplicationModularityUnitTest.java
similarity index 100%
rename from spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/modulith/ApplicationModularityUnitTest.java
rename to spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/modulith/ApplicationModularityUnitTest.java
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/openapi/OpenApiPetsIntegrationTest.java b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/openapi/OpenApiPetsIntegrationTest.java
similarity index 70%
rename from spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/openapi/OpenApiPetsIntegrationTest.java
rename to spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/openapi/OpenApiPetsIntegrationTest.java
index 2ef034bada5d..2e5a30e548e3 100644
--- a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/openapi/OpenApiPetsIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/openapi/OpenApiPetsIntegrationTest.java
@@ -8,10 +8,15 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.web.SecurityFilterChain;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
+
@RunWith(SpringRunner.class)
@SpringBootTest(classes = OpenApiApplication.class)
@ComponentScan("com.baeldung.openapi")
@@ -23,6 +28,15 @@ public class OpenApiPetsIntegrationTest {
@Autowired
private MockMvc mockMvc;
+ @TestConfiguration
+ static class NoSecurityConfig {
+ @Bean
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
+ http.csrf().disable().authorizeHttpRequests().anyRequest().permitAll();
+ return http.build();
+ }
+ }
+
@Test
public void whenReadAll_thenStatusIsNotImplemented() throws Exception {
this.mockMvc.perform(get(PETS_PATH))
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/resilientapp/ResilientAppControllerManualTest.java b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/resilientapp/ResilientAppControllerManualTest.java
similarity index 97%
rename from spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/resilientapp/ResilientAppControllerManualTest.java
rename to spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/resilientapp/ResilientAppControllerManualTest.java
index 26c50ee39dc8..fc9761b9cb40 100644
--- a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/resilientapp/ResilientAppControllerManualTest.java
+++ b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/resilientapp/ResilientAppControllerManualTest.java
@@ -3,25 +3,21 @@
import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.ok;
import static com.github.tomakehurst.wiremock.client.WireMock.serverError;
-
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
-import static org.junit.jupiter.api.Assertions.*;
-
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.springframework.http.HttpStatus.BANDWIDTH_LIMIT_EXCEEDED;
import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.HttpStatus.TOO_MANY_REQUESTS;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
import java.util.stream.IntStream;
import org.junit.Assert;
-
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
diff --git a/spring-grpc/README.md b/spring-grpc/README.md
new file mode 100644
index 000000000000..7c9e7b0db64d
--- /dev/null
+++ b/spring-grpc/README.md
@@ -0,0 +1,3 @@
+## Spring Protocol Buffers
+
+This module contains articles about Spring with gRPC
diff --git a/spring-grpc/pom.xml b/spring-grpc/pom.xml
new file mode 100644
index 000000000000..1085c90d3813
--- /dev/null
+++ b/spring-grpc/pom.xml
@@ -0,0 +1,113 @@
+
+
+ 4.0.0
+ spring-grpc
+ 0.1-SNAPSHOT
+ spring-grpc
+
+
+ com.baeldung
+ parent-boot-3
+ 0.0.1-SNAPSHOT
+ ../parent-boot-3
+
+
+
+
+ io.grpc
+ grpc-services
+ ${grpc-services.version}
+
+
+ org.springframework.grpc
+ spring-grpc-spring-boot-starter
+ ${spring-grpc.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring-boot.version}
+ test
+
+
+ org.springframework.grpc
+ spring-grpc-test
+ ${spring-grpc.version}
+ test
+
+
+ ch.qos.logback
+ logback-core
+
+
+ ch.qos.logback
+ logback-classic
+
+
+
+
+
+ org.springframework.grpc
+ spring-grpc-dependencies
+ ${spring-grpc.version}
+ pom
+ import
+
+
+
+
+
+
+
+ kr.motd.maven
+ os-maven-plugin
+ 1.7.1
+
+
+ initialize
+ initialize
+
+ detect
+
+
+
+
+
+ org.xolstice.maven.plugins
+ protobuf-maven-plugin
+ 0.6.1
+
+ com.google.protobuf:protoc:${protobuf-java.version}:exe:${os.detected.classifier}
+ grpc-java
+ io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
+
+
+
+ compile
+
+ compile
+ compile-custom
+
+
+ jakarta_omit,@generated=omit
+
+
+
+
+
+
+
+
+ 17
+ 1.72.0
+ 4.30.2
+ 0.8.0
+ 1.72.0
+ 0.8.0
+ 3.4.5
+
+
+
\ No newline at end of file
diff --git a/spring-grpc/src/main/java/com/baeldung/grpc/GrpcCalculatorService.java b/spring-grpc/src/main/java/com/baeldung/grpc/GrpcCalculatorService.java
new file mode 100644
index 000000000000..25890b5e1c9c
--- /dev/null
+++ b/spring-grpc/src/main/java/com/baeldung/grpc/GrpcCalculatorService.java
@@ -0,0 +1,20 @@
+package com.baeldung.grpc;
+
+import org.springframework.stereotype.Service;
+import org.springframework.grpc.calculator.proto.CalculatorGrpc;
+import org.springframework.grpc.calculator.proto.Response;
+import org.springframework.grpc.calculator.proto.Request;
+
+import io.grpc.stub.StreamObserver;
+
+@Service
+public class GrpcCalculatorService extends CalculatorGrpc.CalculatorImplBase {
+
+ @Override
+ public void multiply(Request req, StreamObserver responseObserver) {
+ Response reply = Response.newBuilder().setResult(req.getFirstValue() * req.getSecondValue()).build();
+ responseObserver.onNext(reply);
+ responseObserver.onCompleted();
+ }
+
+}
diff --git a/spring-grpc/src/main/java/com/baeldung/grpc/SpringgRPCApplication.java b/spring-grpc/src/main/java/com/baeldung/grpc/SpringgRPCApplication.java
new file mode 100644
index 000000000000..30e284d14e79
--- /dev/null
+++ b/spring-grpc/src/main/java/com/baeldung/grpc/SpringgRPCApplication.java
@@ -0,0 +1,13 @@
+package com.baeldung.grpc;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringgRPCApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringgRPCApplication.class, args);
+ }
+
+}
diff --git a/spring-grpc/src/main/proto/calculator.proto b/spring-grpc/src/main/proto/calculator.proto
new file mode 100644
index 000000000000..fecd033cfd74
--- /dev/null
+++ b/spring-grpc/src/main/proto/calculator.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.springframework.grpc.calculator.proto";
+option java_outer_classname = "CalculatorProto";
+
+service Calculator {
+ rpc Multiply(Request) returns (Response) {}
+}
+
+message Request {
+ int32 firstValue = 1;
+ int32 secondValue = 2;
+}
+
+message Response {
+ int32 result = 1;
+}
\ No newline at end of file
diff --git a/spring-grpc/src/main/resources/application.properties b/spring-grpc/src/main/resources/application.properties
new file mode 100644
index 000000000000..8addb2e8a215
--- /dev/null
+++ b/spring-grpc/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=Calculator
\ No newline at end of file
diff --git a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/CustomPartitioner.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/CustomPartitioner.java
similarity index 93%
rename from spring-kafka/src/main/java/com/baeldung/partitioningstrategy/CustomPartitioner.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/CustomPartitioner.java
index f4899cf9a364..b63bc248cd3f 100644
--- a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/CustomPartitioner.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/CustomPartitioner.java
@@ -1,10 +1,10 @@
-package com.baeldung.partitioningstrategy;
+package com.baeldung.spring.kafka.partitioningstrategy;
+
+import java.util.Map;
import org.apache.kafka.clients.producer.Partitioner;
import org.apache.kafka.common.Cluster;
-import java.util.Map;
-
public class CustomPartitioner implements Partitioner {
private static final int PREMIUM_PARTITION = 0;
private static final int NORMAL_PARTITION = 1;
diff --git a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/KafkaApplication.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaApplication.java
similarity index 95%
rename from spring-kafka/src/main/java/com/baeldung/partitioningstrategy/KafkaApplication.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaApplication.java
index c2ca1d3a4713..204364ea9387 100644
--- a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/KafkaApplication.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaApplication.java
@@ -1,4 +1,7 @@
-package com.baeldung.partitioningstrategy;
+package com.baeldung.spring.kafka.partitioningstrategy;
+
+import java.util.HashMap;
+import java.util.Map;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.KafkaConsumer;
@@ -12,9 +15,6 @@
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
-import java.util.HashMap;
-import java.util.Map;
-
@SpringBootApplication
public class KafkaApplication {
@@ -26,7 +26,7 @@ public KafkaTemplate kafkaTemplate() {
@Bean
public ProducerFactory producerFactory() {
Map configProps = new HashMap<>();
- configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
+ configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9095");
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
@@ -35,7 +35,7 @@ public ProducerFactory producerFactory() {
@Bean
public KafkaConsumer kafkaConsumer() {
Map configProps = new HashMap<>();
- configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
+ configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9095");
configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
configProps.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); // Set a unique group ID
diff --git a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/KafkaMessageConsumer.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaMessageConsumer.java
similarity index 95%
rename from spring-kafka/src/main/java/com/baeldung/partitioningstrategy/KafkaMessageConsumer.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaMessageConsumer.java
index 8290b0ab0fa1..58ad40e4ceb1 100644
--- a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/KafkaMessageConsumer.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaMessageConsumer.java
@@ -1,14 +1,16 @@
-package com.baeldung.partitioningstrategy;
+package com.baeldung.spring.kafka.partitioningstrategy;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
-import jakarta.annotation.Nullable;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Service;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+
+import jakarta.annotation.Nullable;
@Service
public class KafkaMessageConsumer {
diff --git a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/ReceivedMessage.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/ReceivedMessage.java
similarity index 91%
rename from spring-kafka/src/main/java/com/baeldung/partitioningstrategy/ReceivedMessage.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/ReceivedMessage.java
index a262f62e3930..f3582a2e4b0f 100644
--- a/spring-kafka/src/main/java/com/baeldung/partitioningstrategy/ReceivedMessage.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/partitioningstrategy/ReceivedMessage.java
@@ -1,4 +1,4 @@
-package com.baeldung.partitioningstrategy;
+package com.baeldung.spring.kafka.partitioningstrategy;
public class ReceivedMessage {
private final String key;
diff --git a/spring-kafka/src/main/java/com/baeldung/sasl/KafkaConsumer.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/sasl/KafkaConsumer.java
similarity index 94%
rename from spring-kafka/src/main/java/com/baeldung/sasl/KafkaConsumer.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/sasl/KafkaConsumer.java
index 15f830d51a2f..4cd74105775a 100644
--- a/spring-kafka/src/main/java/com/baeldung/sasl/KafkaConsumer.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/sasl/KafkaConsumer.java
@@ -1,12 +1,13 @@
-package com.baeldung.sasl;
+package com.baeldung.spring.kafka.sasl;
+
+import java.util.ArrayList;
+import java.util.List;
-import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
-import java.util.List;
+import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
diff --git a/spring-kafka/src/main/java/com/baeldung/sasl/KafkaSaslApplication.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/sasl/KafkaSaslApplication.java
similarity index 90%
rename from spring-kafka/src/main/java/com/baeldung/sasl/KafkaSaslApplication.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/sasl/KafkaSaslApplication.java
index 57e2ac605bb7..be2c6c0d2392 100644
--- a/spring-kafka/src/main/java/com/baeldung/sasl/KafkaSaslApplication.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/sasl/KafkaSaslApplication.java
@@ -1,4 +1,4 @@
-package com.baeldung.sasl;
+package com.baeldung.spring.kafka.sasl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-kafka/src/main/resources/application-sasl.yml b/spring-kafka-2/src/main/resources/application-sasl.yml
similarity index 100%
rename from spring-kafka/src/main/resources/application-sasl.yml
rename to spring-kafka-2/src/main/resources/application-sasl.yml
diff --git a/spring-kafka-2/src/main/resources/application.properties b/spring-kafka-2/src/main/resources/application.properties
index 76397644400f..fd4cc7a5bf5a 100644
--- a/spring-kafka-2/src/main/resources/application.properties
+++ b/spring-kafka-2/src/main/resources/application.properties
@@ -1,4 +1,4 @@
-spring.kafka.bootstrap-servers=localhost:9092,localhost:9093,localhost:9094
+spring.kafka.bootstrap-servers=localhost:9092,localhost:9093,localhost:9094, localhost:9095
message.topic.name=baeldung
long.message.topic.name=longMessage
greeting.topic.name=greeting
diff --git a/spring-kafka/src/test/java/com/baeldung/partitioningstrategy/KafkaApplicationIntegrationTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaApplicationIntegrationTest.java
similarity index 98%
rename from spring-kafka/src/test/java/com/baeldung/partitioningstrategy/KafkaApplicationIntegrationTest.java
rename to spring-kafka-2/src/test/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaApplicationIntegrationTest.java
index 34e466b4b965..a3ed7993b390 100644
--- a/spring-kafka/src/test/java/com/baeldung/partitioningstrategy/KafkaApplicationIntegrationTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/partitioningstrategy/KafkaApplicationIntegrationTest.java
@@ -1,4 +1,15 @@
-package com.baeldung.partitioningstrategy;
+package com.baeldung.spring.kafka.partitioningstrategy;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.awaitility.Awaitility.await;
+import static org.junit.Assert.assertEquals;
+
+import java.time.Duration;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
@@ -16,19 +27,8 @@
import org.springframework.kafka.test.context.EmbeddedKafka;
import org.springframework.kafka.test.utils.KafkaTestUtils;
-import java.time.Duration;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.awaitility.Awaitility.await;
-import static org.junit.Assert.assertEquals;
-
@SpringBootTest
-@EmbeddedKafka(partitions = 3, brokerProperties = { "listeners=PLAINTEXT://localhost:9092" }, kraft = false)
+@EmbeddedKafka(partitions = 3, brokerProperties = { "listeners=PLAINTEXT://localhost:9095" }, kraft = false)
public class KafkaApplicationIntegrationTest {
@Autowired
diff --git a/spring-kafka/src/test/java/com/baeldung/sasl/SprintContextTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/sasl/SprintContextTest.java
similarity index 85%
rename from spring-kafka/src/test/java/com/baeldung/sasl/SprintContextTest.java
rename to spring-kafka-2/src/test/java/com/baeldung/spring/kafka/sasl/SprintContextTest.java
index 1739ce983b69..77402285b6b2 100644
--- a/spring-kafka/src/test/java/com/baeldung/sasl/SprintContextTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/sasl/SprintContextTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.sasl;
+package com.baeldung.spring.kafka.sasl;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -7,7 +7,7 @@
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = KafkaSaslApplication.class)
-class SpringContextTest {
+class SprintContextTest {
@Test
void whenSpringContextIsBootstrapped_thenNoExceptions() {
diff --git a/spring-kafka/src/test/resources/sasl/Dockerfile b/spring-kafka-2/src/test/resources/sasl/Dockerfile
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/Dockerfile
rename to spring-kafka-2/src/test/resources/sasl/Dockerfile
diff --git a/spring-kafka/src/test/resources/sasl/config/kadm5.acl b/spring-kafka-2/src/test/resources/sasl/config/kadm5.acl
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/config/kadm5.acl
rename to spring-kafka-2/src/test/resources/sasl/config/kadm5.acl
diff --git a/spring-kafka/src/test/resources/sasl/config/kafka_server_jaas.conf b/spring-kafka-2/src/test/resources/sasl/config/kafka_server_jaas.conf
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/config/kafka_server_jaas.conf
rename to spring-kafka-2/src/test/resources/sasl/config/kafka_server_jaas.conf
diff --git a/spring-kafka/src/test/resources/sasl/config/krb5.conf b/spring-kafka-2/src/test/resources/sasl/config/krb5.conf
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/config/krb5.conf
rename to spring-kafka-2/src/test/resources/sasl/config/krb5.conf
diff --git a/spring-kafka/src/test/resources/sasl/config/zookeeper_jaas.conf b/spring-kafka-2/src/test/resources/sasl/config/zookeeper_jaas.conf
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/config/zookeeper_jaas.conf
rename to spring-kafka-2/src/test/resources/sasl/config/zookeeper_jaas.conf
diff --git a/spring-kafka/src/test/resources/sasl/docker-compose.yml b/spring-kafka-2/src/test/resources/sasl/docker-compose.yml
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/docker-compose.yml
rename to spring-kafka-2/src/test/resources/sasl/docker-compose.yml
diff --git a/spring-kafka/src/test/resources/sasl/setup_kdc.sh b/spring-kafka-2/src/test/resources/sasl/setup_kdc.sh
similarity index 100%
rename from spring-kafka/src/test/resources/sasl/setup_kdc.sh
rename to spring-kafka-2/src/test/resources/sasl/setup_kdc.sh