diff --git a/core-java-modules/core-java-jar/pom.xml b/core-java-modules/core-java-jar/pom.xml
index 19da9b8a56..c56fcbd8b5 100644
--- a/core-java-modules/core-java-jar/pom.xml
+++ b/core-java-modules/core-java-jar/pom.xml
@@ -54,6 +54,12 @@
moneta
${javamoney.moneta.version}
+
+ org.mockito
+ mockito-junit-jupiter
+ ${mockito.version}
+ test
+
@@ -266,6 +272,7 @@
0.4
1.8.7
+ 4.6.1
1.1
3.0.0-M1
@@ -279,4 +286,4 @@
1.8
-
\ No newline at end of file
+
diff --git a/core-java-modules/core-java-jar/src/main/java/com/baeldung/jarfile/JarFilePathResolver.java b/core-java-modules/core-java-jar/src/main/java/com/baeldung/jarfile/JarFilePathResolver.java
new file mode 100644
index 0000000000..3dab91f31a
--- /dev/null
+++ b/core-java-modules/core-java-jar/src/main/java/com/baeldung/jarfile/JarFilePathResolver.java
@@ -0,0 +1,42 @@
+package com.baeldung.jarfile;
+
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Paths;
+
+public class JarFilePathResolver {
+
+ public String getJarFilePath(Class clazz) {
+ try {
+ return byGetProtectionDomain(clazz);
+ } catch (Exception e) {
+ // cannot get jar file path using byGetProtectionDomain
+ // Exception handling omitted
+ }
+ return byGetResource(clazz);
+ }
+
+ String byGetProtectionDomain(Class clazz) throws URISyntaxException {
+ URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
+ return Paths.get(url.toURI()).toString();
+ }
+
+ String byGetResource(Class clazz) {
+ final URL classResource = clazz.getResource(clazz.getSimpleName() + ".class");
+ if (classResource == null) {
+ throw new RuntimeException("class resource is null");
+ }
+
+ final String url = classResource.toString();
+ if (url.startsWith("jar:file:")) {
+ // extract 'file:......jarName.jar' part from the url string
+ String path = url.replaceAll("^jar:(file:.*[.]jar)!/.*", "$1");
+ try {
+ return Paths.get(new URL(path).toURI()).toString();
+ } catch (Exception e) {
+ throw new RuntimeException("Invalid Jar File URL String");
+ }
+ }
+ throw new RuntimeException("Invalid Jar File URL String");
+ }
+}
diff --git a/core-java-modules/core-java-jar/src/test/java/com/baeldung/jarfile/JarFilePathResolverUnitTest.java b/core-java-modules/core-java-jar/src/test/java/com/baeldung/jarfile/JarFilePathResolverUnitTest.java
new file mode 100644
index 0000000000..ad84bd9379
--- /dev/null
+++ b/core-java-modules/core-java-jar/src/test/java/com/baeldung/jarfile/JarFilePathResolverUnitTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.jarfile;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.google.common.base.Ascii;
+import java.io.File;
+import java.net.URISyntaxException;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+class JarFilePathResolverUnitTest {
+ @Spy
+ JarFilePathResolver jarFilePathResolver;
+
+ @Test
+ void givenClassObjectWhenCallingByGetProtectionDomainShouldGetExpectedPath() throws Exception {
+ String jarPath = jarFilePathResolver.byGetProtectionDomain(Ascii.class);
+ assertThat(jarPath).endsWith(".jar").contains("guava");
+ assertThat(new File(jarPath)).exists();
+ }
+
+ @Test
+ void givenClassObjectWhenCallingByGetResourceShouldGetExpectedPath() {
+ String jarPath = jarFilePathResolver.byGetResource(Ascii.class);
+ assertThat(jarPath).endsWith(".jar").contains("guava");
+ assertThat(new File(jarPath)).exists();
+ }
+
+ @Test
+ void givenClassObjectWhenNoSecurityExceptionRaisedShouldGetExpectedPath() throws URISyntaxException {
+ String jarPath = jarFilePathResolver.getJarFilePath(Ascii.class);
+ assertThat(jarPath).endsWith(".jar").contains("guava");
+ assertThat(new File(jarPath)).exists();
+ verify(jarFilePathResolver, times(1)).byGetProtectionDomain(Ascii.class);
+ verify(jarFilePathResolver, never()).byGetResource(Ascii.class);
+ }
+
+ @Test
+ void givenClassObjectWhenSecurityExceptionRaisedShouldGetExpectedPath() throws URISyntaxException {
+ when(jarFilePathResolver.byGetProtectionDomain(Ascii.class)).thenThrow(new SecurityException("not allowed"));
+ String jarPath = jarFilePathResolver.getJarFilePath(Ascii.class);
+ assertThat(jarPath).endsWith(".jar").contains("guava");
+ assertThat(new File(jarPath)).exists();
+ verify(jarFilePathResolver, times(1)).byGetProtectionDomain(Ascii.class);
+ verify(jarFilePathResolver, times(1)).byGetResource(Ascii.class);
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml
index 6d3771bd31..5255866f03 100644
--- a/core-java-modules/core-java-lang-5/pom.xml
+++ b/core-java-modules/core-java-lang-5/pom.xml
@@ -13,7 +13,6 @@
core-java-modules
0.0.1-SNAPSHOT
-
core-java-lang-5
@@ -23,5 +22,4 @@
-
-
\ No newline at end of file
+
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/specific/Book.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/specific/Book.java
new file mode 100644
index 0000000000..5877147082
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/specific/Book.java
@@ -0,0 +1,17 @@
+package com.baeldung.imports.specific;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+public class Book {
+
+ private UUID id;
+
+ private String name;
+
+ private Date datePublished;
+
+ private List authors;
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/Book.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/Book.java
new file mode 100644
index 0000000000..18754cdd28
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/Book.java
@@ -0,0 +1,15 @@
+package com.baeldung.imports.wildcard;
+
+import java.util.*;
+
+public class Book {
+
+ private UUID id;
+
+ private String name;
+
+ private Date datePublished;
+
+ private List authors;
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/BookView.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/BookView.java
new file mode 100644
index 0000000000..e6e21ab03d
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/BookView.java
@@ -0,0 +1,17 @@
+package com.baeldung.imports.wildcard;
+
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+
+public class BookView extends Frame {
+
+ private UUID id;
+
+ private String name;
+
+ private Date datePublished;
+
+ private List authors;
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/Library.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/Library.java
new file mode 100644
index 0000000000..8e1d79aca4
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/imports/wildcard/Library.java
@@ -0,0 +1,19 @@
+package com.baeldung.imports.wildcard;
+
+import java.util.*;
+import java.sql.*;
+import java.sql.Date;
+
+public class Library {
+
+ private UUID id;
+
+ private String name;
+
+ private Time openingTime;
+
+ private Time closingTime;
+
+ private List datesClosed;
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/PersonAndEmployeeReflectionUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/PersonAndEmployeeReflectionUnitTest.java
index b1a6a1fe57..cb1b5e926a 100644
--- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/PersonAndEmployeeReflectionUnitTest.java
+++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/PersonAndEmployeeReflectionUnitTest.java
@@ -9,7 +9,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import static org.junit.Assert.*;
diff --git a/core-java-modules/core-java-string-apis/src/main/java/com/baeldung/clearstringbuilderorstringbuffer/BenchmarkRunner.java b/core-java-modules/core-java-string-apis/src/main/java/com/baeldung/clearstringbuilderorstringbuffer/BenchmarkRunner.java
new file mode 100644
index 0000000000..e0cead9c77
--- /dev/null
+++ b/core-java-modules/core-java-string-apis/src/main/java/com/baeldung/clearstringbuilderorstringbuffer/BenchmarkRunner.java
@@ -0,0 +1,32 @@
+package com.baeldung.clearstringbuilderorstringbuffer;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.infra.Blackhole;
+
+public class BenchmarkRunner {
+
+ public static void main(String[] args) throws Exception {
+ org.openjdk.jmh.Main.main(args);
+ }
+
+ @State(Scope.Benchmark)
+ public static class MyState {
+ final String HELLO = "Hello World";
+ final StringBuilder sb = new StringBuilder().append(HELLO);
+ }
+
+ @Benchmark
+ public void evaluateSetLength(Blackhole blackhole, MyState state) {
+ state.sb.setLength(0);
+ blackhole.consume(state.sb.toString());
+ }
+
+ @Benchmark
+ public void evaluateDelete(Blackhole blackhole, MyState state) {
+ state.sb.delete(0, state.sb.length());
+ blackhole.consume(state.sb.toString());
+ }
+
+}
diff --git a/core-java-modules/core-java-string-apis/src/test/java/com/baeldung/clearstringbuilderorstringbuffer/ClearStringBuilderOrStringBufferUnitTest.java b/core-java-modules/core-java-string-apis/src/test/java/com/baeldung/clearstringbuilderorstringbuffer/ClearStringBuilderOrStringBufferUnitTest.java
new file mode 100644
index 0000000000..ad46c23969
--- /dev/null
+++ b/core-java-modules/core-java-string-apis/src/test/java/com/baeldung/clearstringbuilderorstringbuffer/ClearStringBuilderOrStringBufferUnitTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.clearstringbuilderorstringbuffer;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class ClearStringBuilderOrStringBufferUnitTest {
+
+ @Test
+ void whenSetLengthToZero_ThenStringBuilderIsCleared() {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("Hello World");
+ int initialCapacity = stringBuilder.capacity();
+ stringBuilder.setLength(0);
+ assertEquals("", stringBuilder.toString());
+ assertEquals(initialCapacity, stringBuilder.capacity());
+ }
+
+ @Test
+ void whenDeleteAll_ThenStringBuilderIsCleared() {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("Hello World");
+ int initialCapacity = stringBuilder.capacity();
+ stringBuilder.delete(0, stringBuilder.length());
+ assertEquals("", stringBuilder.toString());
+ assertEquals(initialCapacity, stringBuilder.capacity());
+ }
+
+ @Test
+ void whenSetLengthToZero_ThenStringBufferIsCleared() {
+ StringBuffer stringBuffer = new StringBuffer();
+ stringBuffer.append("Hello World");
+ int initialCapacity = stringBuffer.capacity();
+ stringBuffer.setLength(0);
+ assertEquals("", stringBuffer.toString());
+ assertEquals(initialCapacity, stringBuffer.capacity());
+ }
+
+ @Test
+ void whenDeleteAll_ThenStringBufferIsCleared() {
+ StringBuffer stringBuffer = new StringBuffer();
+ stringBuffer.append("Hello World");
+ int initialCapacity = stringBuffer.capacity();
+ stringBuffer.delete(0, stringBuffer.length());
+ assertEquals("", stringBuffer.toString());
+ assertEquals(initialCapacity, stringBuffer.capacity());
+ }
+
+ // Note: It did not make the cut to the article, but here is another way to reset a StringBuilder
+ @Test
+ void whenAssignedToNewStringBuilder_ThenStringBuilderIsCleared() {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("Hello World");
+ stringBuilder = new StringBuilder();
+ assertEquals("", stringBuilder.toString());
+ }
+
+ @Test
+ void whenAssignedToNewStringBuffer_ThenStringBufferIsCleared() {
+ StringBuffer stringBuffer = new StringBuffer();
+ stringBuffer.append("Hello World");
+ stringBuffer = new StringBuffer();
+ assertEquals("", stringBuffer.toString());
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 0e0aa876eb..1fe42bd734 100644
--- a/pom.xml
+++ b/pom.xml
@@ -259,7 +259,7 @@
-
+
@@ -278,7 +278,7 @@
-
+
@@ -621,7 +621,6 @@
spring-katharsis
spring-mobile
- spring-mockito
spring-native
spring-protobuf
spring-quartz
@@ -1050,7 +1049,6 @@
spring-katharsis
spring-mobile
- spring-mockito
spring-native
spring-protobuf
spring-quartz
@@ -1364,7 +1362,7 @@
1.7.32
- 1.2.6
+ 1.2.7
2.22.2
diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml
index 3d5db76827..8213637631 100644
--- a/testing-modules/pom.xml
+++ b/testing-modules/pom.xml
@@ -39,6 +39,7 @@
rest-assured
rest-testing
selenium-junit-testng
+ spring-mockito
spring-testing-2
spring-testing
test-containers
diff --git a/spring-mockito/.gitignore b/testing-modules/spring-mockito/.gitignore
similarity index 100%
rename from spring-mockito/.gitignore
rename to testing-modules/spring-mockito/.gitignore
diff --git a/spring-mockito/README.md b/testing-modules/spring-mockito/README.md
similarity index 100%
rename from spring-mockito/README.md
rename to testing-modules/spring-mockito/README.md
diff --git a/spring-mockito/pom.xml b/testing-modules/spring-mockito/pom.xml
similarity index 94%
rename from spring-mockito/pom.xml
rename to testing-modules/spring-mockito/pom.xml
index e0d7bee6f3..117da9478e 100644
--- a/spring-mockito/pom.xml
+++ b/testing-modules/spring-mockito/pom.xml
@@ -13,7 +13,7 @@
com.baeldung
parent-boot-2
0.0.1-SNAPSHOT
- ../parent-boot-2
+ ../../parent-boot-2
diff --git a/spring-mockito/src/main/java/com/baeldung/MocksApplication.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/MocksApplication.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/MocksApplication.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/MocksApplication.java
diff --git a/spring-mockito/src/main/java/com/baeldung/NameService.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/NameService.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/NameService.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/NameService.java
diff --git a/spring-mockito/src/main/java/com/baeldung/UserService.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/UserService.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/UserService.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/UserService.java
diff --git a/spring-mockito/src/main/java/com/baeldung/app/api/Flower.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/Flower.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/app/api/Flower.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/Flower.java
diff --git a/spring-mockito/src/main/java/com/baeldung/app/api/MessageApi.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/MessageApi.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/app/api/MessageApi.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/MessageApi.java
diff --git a/spring-mockito/src/main/java/com/baeldung/app/rest/FlowerController.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/FlowerController.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/app/rest/FlowerController.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/FlowerController.java
diff --git a/spring-mockito/src/main/java/com/baeldung/app/rest/MessageController.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/MessageController.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/app/rest/MessageController.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/MessageController.java
diff --git a/spring-mockito/src/main/java/com/baeldung/domain/model/Message.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/model/Message.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/domain/model/Message.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/domain/model/Message.java
diff --git a/spring-mockito/src/main/java/com/baeldung/domain/service/FlowerService.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/FlowerService.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/domain/service/FlowerService.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/FlowerService.java
diff --git a/spring-mockito/src/main/java/com/baeldung/domain/service/MessageService.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/MessageService.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/domain/service/MessageService.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/MessageService.java
diff --git a/spring-mockito/src/main/java/com/baeldung/domain/util/MessageMatcher.java b/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/util/MessageMatcher.java
similarity index 100%
rename from spring-mockito/src/main/java/com/baeldung/domain/util/MessageMatcher.java
rename to testing-modules/spring-mockito/src/main/java/com/baeldung/domain/util/MessageMatcher.java
diff --git a/spring-mockito/src/main/resources/application.properties b/testing-modules/spring-mockito/src/main/resources/application.properties
similarity index 100%
rename from spring-mockito/src/main/resources/application.properties
rename to testing-modules/spring-mockito/src/main/resources/application.properties
diff --git a/spring-mockito/src/main/resources/logback.xml b/testing-modules/spring-mockito/src/main/resources/logback.xml
similarity index 100%
rename from spring-mockito/src/main/resources/logback.xml
rename to testing-modules/spring-mockito/src/main/resources/logback.xml
diff --git a/spring-mockito/src/test/java/com/baeldung/NameServiceTestConfiguration.java b/testing-modules/spring-mockito/src/test/java/com/baeldung/NameServiceTestConfiguration.java
similarity index 100%
rename from spring-mockito/src/test/java/com/baeldung/NameServiceTestConfiguration.java
rename to testing-modules/spring-mockito/src/test/java/com/baeldung/NameServiceTestConfiguration.java
diff --git a/spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java b/testing-modules/spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java
similarity index 100%
rename from spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java
rename to testing-modules/spring-mockito/src/test/java/com/baeldung/UserServiceUnitTest.java
diff --git a/spring-mockito/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java b/testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java
similarity index 100%
rename from spring-mockito/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java
rename to testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java
diff --git a/spring-mockito/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java b/testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java
similarity index 100%
rename from spring-mockito/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java
rename to testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java
diff --git a/spring-mockito/src/test/java/org/baeldung/SpringContextTest.java b/testing-modules/spring-mockito/src/test/java/org/baeldung/SpringContextTest.java
similarity index 100%
rename from spring-mockito/src/test/java/org/baeldung/SpringContextTest.java
rename to testing-modules/spring-mockito/src/test/java/org/baeldung/SpringContextTest.java