diff --git a/core-java-modules/multimodulemavenproject/daomodule/pom.xml b/core-java-modules/multimodulemavenproject/daomodule/pom.xml
new file mode 100644
index 0000000000..a260e15e6d
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/daomodule/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.baeldung.multimodulemavenproject
+ multimodulemavenproject
+ 1.0
+
+ com.baeldung.daomodule
+ daomodule
+ 1.0
+ jar
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
+ 9
+ 9
+
+
\ No newline at end of file
diff --git a/core-java-modules/multimodulemavenproject/daomodule/src/main/java/com/baeldung/daomodule/Dao.java b/core-java-modules/multimodulemavenproject/daomodule/src/main/java/com/baeldung/daomodule/Dao.java
new file mode 100644
index 0000000000..9568bae9d9
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/daomodule/src/main/java/com/baeldung/daomodule/Dao.java
@@ -0,0 +1,11 @@
+package com.baeldung.daomodule;
+import java.util.List;
+import java.util.Optional;
+
+public interface Dao {
+
+ Optional findById(int id);
+
+ List findAll();
+
+}
diff --git a/core-java-modules/multimodulemavenproject/daomodule/src/main/java/module-info.java b/core-java-modules/multimodulemavenproject/daomodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..20c51d316a
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/daomodule/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module com.baeldung.daomodule {
+ exports com.baeldung.daomodule;
+}
diff --git a/core-java-modules/multimodulemavenproject/entitymodule/pom.xml b/core-java-modules/multimodulemavenproject/entitymodule/pom.xml
new file mode 100644
index 0000000000..1fd672d03e
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/entitymodule/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ com.baeldung.multimodulemavenproject
+ multimodulemavenproject
+ 1.0
+
+ com.baeldung.entitymodule
+ entitymodule
+ 1.0
+ jar
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
+ 9
+ 9
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/multimodulemavenproject/entitymodule/src/main/java/com/baeldung/entitymodule/User.java b/core-java-modules/multimodulemavenproject/entitymodule/src/main/java/com/baeldung/entitymodule/User.java
new file mode 100644
index 0000000000..c025bffd87
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/entitymodule/src/main/java/com/baeldung/entitymodule/User.java
@@ -0,0 +1,19 @@
+package com.baeldung.entitymodule;
+
+public class User {
+
+ private final String name;
+
+ public User(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String toString() {
+ return "User{" + "name=" + name + '}';
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/multimodulemavenproject/entitymodule/src/main/java/module-info.java b/core-java-modules/multimodulemavenproject/entitymodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..b2c4553357
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/entitymodule/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module com.baeldung.entitymodule {
+ exports com.baeldung.entitymodule;
+}
diff --git a/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml b/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml
new file mode 100644
index 0000000000..26e6a15b1e
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml
@@ -0,0 +1,45 @@
+
+
+ 4.0.0
+
+ com.baeldung.multimodulemavenproject
+ multimodulemavenproject
+ 1.0
+
+ com.baeldung.mainappmodule
+ mainappmodule
+ 1.0
+ jar
+
+
+
+ com.baeldung.entitymodule
+ entitymodule
+ 1.0
+
+
+ com.baeldung.daomodule
+ daomodule
+ 1.0
+
+
+ com.baeldung.userdaomodule
+ userdaomodule
+ 1.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
+ 9
+ 9
+
+
\ No newline at end of file
diff --git a/core-java-modules/multimodulemavenproject/mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java b/core-java-modules/multimodulemavenproject/mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java
new file mode 100644
index 0000000000..cf0ba1d9bc
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java
@@ -0,0 +1,19 @@
+package com.baeldung.mainappmodule;
+
+import com.baeldung.daomodule.Dao;
+import com.baeldung.entitymodule.User;
+import com.baeldung.userdaomodule.UserDao;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Application {
+
+ public static void main(String args[]) {
+ Map users = new HashMap<>();
+ users.put(1, new User("Julie"));
+ users.put(2, new User("David"));
+ Dao userDao = new UserDao(users);
+ userDao.findAll().forEach(System.out::println);
+ }
+
+}
diff --git a/core-java-modules/multimodulemavenproject/mainappmodule/src/main/java/module-info.java b/core-java-modules/multimodulemavenproject/mainappmodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..dd7620c7bf
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/mainappmodule/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module com.baeldung.mainppmodule {
+
+ requires com.baeldung.entitymodule;
+ requires com.baeldung.daomodule;
+ requires com.baeldung.userdaomodule;
+ uses com.baeldung.userdaomodule.UserDao;
+
+}
diff --git a/core-java-modules/multimodulemavenproject/pom.xml b/core-java-modules/multimodulemavenproject/pom.xml
new file mode 100644
index 0000000000..3d56f1356b
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/pom.xml
@@ -0,0 +1,62 @@
+
+
+ 4.0.0
+ com.baeldung.multimodulemavenproject
+ multimodulemavenproject
+ 1.0
+ pom
+ multimodulemavenproject
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+ ../../
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.assertj
+ assertj-core
+ 3.12.2
+ test
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+
+ 1.9
+ 1.9
+
+
+
+
+
+
+
+
+ entitymodule
+ daomodule
+ userdaomodule
+ mainappmodule
+
+
+
+ UTF-8
+
+
diff --git a/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml b/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml
new file mode 100644
index 0000000000..63968452db
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ com.baeldung.multimodulemavenproject
+ multimodulemavenproject
+ 1.0
+
+ com.baeldung.userdaomodule
+ userdaomodule
+ 1.0
+ jar
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
+
+ com.baeldung.entitymodule
+ entitymodule
+ 1.0
+
+
+ com.baeldung.daomodule
+ daomodule
+ 1.0
+
+
+
+
+ 9
+ 9
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/multimodulemavenproject/userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java b/core-java-modules/multimodulemavenproject/userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java
new file mode 100644
index 0000000000..aba157b431
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java
@@ -0,0 +1,32 @@
+package com.baeldung.userdaomodule;
+
+import com.baeldung.daomodule.Dao;
+import com.baeldung.entitymodule.User;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public class UserDao implements Dao {
+
+ private final Map users;
+
+ public UserDao() {
+ users = new HashMap<>();
+ }
+
+ public UserDao(Map users) {
+ this.users = users;
+ }
+
+ @Override
+ public List findAll() {
+ return new ArrayList<>(users.values());
+ }
+
+ @Override
+ public Optional findById(int id) {
+ return Optional.ofNullable(users.get(id));
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/multimodulemavenproject/userdaomodule/src/main/java/module-info.java b/core-java-modules/multimodulemavenproject/userdaomodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..6dd81dabe5
--- /dev/null
+++ b/core-java-modules/multimodulemavenproject/userdaomodule/src/main/java/module-info.java
@@ -0,0 +1,6 @@
+module com.baeldung.userdaomodule {
+ requires com.baeldung.entitymodule;
+ requires com.baeldung.daomodule;
+ provides com.baeldung.daomodule.Dao with com.baeldung.userdaomodule.UserDao;
+ exports com.baeldung.userdaomodule;
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index ad49cceb9d..ed6a056448 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -2,6 +2,7 @@
4.0.0
+ com.baeldung.core-java-modules
core-java-modules
core-java-modules
pom
@@ -15,5 +16,5 @@
pre-jpms
-
-
\ No newline at end of file
+
+