diff --git a/maven-modules/maven-integration-test/.gitignore b/maven-modules/maven-integration-test/.gitignore
new file mode 100644
index 0000000000..bae0b0d7ce
--- /dev/null
+++ b/maven-modules/maven-integration-test/.gitignore
@@ -0,0 +1,2 @@
+/output-resources
+/.idea/
diff --git a/maven-modules/maven-integration-test/README.md b/maven-modules/maven-integration-test/README.md
new file mode 100644
index 0000000000..e73a73e61e
--- /dev/null
+++ b/maven-modules/maven-integration-test/README.md
@@ -0,0 +1,10 @@
+## Apache Maven
+
+This module contains articles about Integration Testing with Maven and related plugins.
+
+### Relevant Articles
+
+- [Integration Testing with Maven](https://www.baeldung.com/maven-integration-test)
+- [Build a Jar with Maven and Ignore the Test Results](https://www.baeldung.com/maven-ignore-test-results)
+- [Quick Guide to the Maven Surefire Plugin](https://www.baeldung.com/maven-surefire-plugin)
+- [The Maven Failsafe Plugin](https://www.baeldung.com/maven-failsafe-plugin)
\ No newline at end of file
diff --git a/maven-modules/maven-integration-test/pom.xml b/maven-modules/maven-integration-test/pom.xml
new file mode 100644
index 0000000000..0031230bb1
--- /dev/null
+++ b/maven-modules/maven-integration-test/pom.xml
@@ -0,0 +1,283 @@
+
+
+ 4.0.0
+ maven-integration-test
+ 0.0.1-SNAPSHOT
+ maven-integration-test
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../..
+
+
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet-core
+ ${jersey.version}
+
+
+ org.glassfish.jersey.inject
+ jersey-hk2
+ ${jersey.version}
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty.version}
+
+
+ 8999
+
+ quit
+ 9000
+
+
+
+ start-jetty
+ pre-integration-test
+
+ start
+
+
+
+ stop-jetty
+ post-integration-test
+
+ stop
+
+
+
+
+
+ maven-resources-plugin
+ ${maven.resources.version}
+
+ output-resources
+
+
+ input-resources
+
+ *.png
+
+ true
+
+
+
+
+
+ maven-compiler-plugin
+ ${maven.compiler.version}
+
+ ${java.version}
+ ${java.version}
+
+ -Xlint:unchecked
+
+
+
+
+ maven-surefire-plugin
+ ${maven.surefire.version}
+
+
+ DataTest.java
+ **/*IntegrationTest
+
+ com.baeldung.maven.it.Integration
+
+ TestFail.java
+ DataCheck.java
+
+ true
+
+
+
+ maven-failsafe-plugin
+ ${maven.failsafe.version}
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ ${maven.clean.version}
+
+
+
+ output-resources
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ ${maven.build.helper.version}
+
+
+ add-integration-test-source
+ generate-test-sources
+
+ add-test-source
+
+
+
+ src/integration-test/java
+
+
+
+
+ add-integration-test-resource
+ generate-test-resources
+
+ add-test-resource
+
+
+
+
+ src/integration-test/resources
+
+
+
+
+
+
+
+
+
+
+
+ default
+
+
+
+ maven-surefire-plugin
+ ${maven.surefire.version}
+
+
+ DataTest.java
+
+
+ TestFail.java
+ DataCheck.java
+
+ true
+
+
+
+
+
+
+ failsafe
+
+
+
+ maven-failsafe-plugin
+ ${maven.failsafe.version}
+
+
+ **/*RestIT
+ **/RestITCase
+
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
+
+ surefire
+
+
+
+ maven-surefire-plugin
+ ${maven.surefire.version}
+
+
+ integration-test
+
+ test
+
+
+
+ none
+
+
+ **/*IntegrationTest
+
+
+
+
+
+
+
+
+
+ category
+
+
+
+ maven-failsafe-plugin
+ ${maven.failsafe.version}
+
+
+ **/*
+
+ com.baeldung.maven.it.Integration
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
+
+
+
+ 3.0.2
+ 3.8.0
+ 2.22.0
+ 2.22.0
+ 1.1
+ 3.0.0
+ 3.0.0
+ 9.4.11.v20180605
+ 2.27
+
+
+
\ No newline at end of file
diff --git a/maven-modules/maven-integration-test/src/integration-test/java/com/baeldung/maven/it/RestITCase.java b/maven-modules/maven-integration-test/src/integration-test/java/com/baeldung/maven/it/RestITCase.java
new file mode 100644
index 0000000000..aaeeedb661
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/integration-test/java/com/baeldung/maven/it/RestITCase.java
@@ -0,0 +1,24 @@
+package com.baeldung.maven.it;
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+
+public class RestITCase {
+ @Test
+ public void whenSendingGet_thenMessageIsReturned() throws IOException {
+ String url = "http://localhost:8999";
+ URLConnection connection = new URL(url).openConnection();
+ try (InputStream response = connection.getInputStream();
+ Scanner scanner = new Scanner(response)) {
+ String responseBody = scanner.nextLine();
+ assertEquals("Welcome to Baeldung!", responseBody);
+ }
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/it/EndpointConfig.java b/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/it/EndpointConfig.java
new file mode 100644
index 0000000000..919210ccff
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/it/EndpointConfig.java
@@ -0,0 +1,9 @@
+package com.baeldung.maven.it;
+
+import org.glassfish.jersey.server.ResourceConfig;
+
+public class EndpointConfig extends ResourceConfig {
+ public EndpointConfig() {
+ register(RestEndpoint.class);
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/it/RestEndpoint.java b/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/it/RestEndpoint.java
new file mode 100644
index 0000000000..c234891865
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/it/RestEndpoint.java
@@ -0,0 +1,12 @@
+package com.baeldung.maven.it;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+@Path("/")
+public class RestEndpoint {
+ @GET
+ public String hello() {
+ return "Welcome to Baeldung!";
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/plugins/Data.java b/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/plugins/Data.java
new file mode 100644
index 0000000000..6ac6f9ab46
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/main/java/com/baeldung/maven/plugins/Data.java
@@ -0,0 +1,16 @@
+package com.baeldung.maven.plugins;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Data {
+ List textList = new ArrayList();
+
+ public void addText(String text) {
+ textList.add(text);
+ }
+
+ public List getTextList() {
+ return this.textList;
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/main/resources/logback.xml b/maven-modules/maven-integration-test/src/main/resources/logback.xml
new file mode 100644
index 0000000000..7d900d8ea8
--- /dev/null
+++ b/maven-modules/maven-integration-test/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/maven-modules/maven-integration-test/src/main/webapp/WEB-INF/web.xml b/maven-modules/maven-integration-test/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..1751ad17a5
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,17 @@
+
+
+ rest-servlet
+ org.glassfish.jersey.servlet.ServletContainer
+
+ javax.ws.rs.Application
+ com.baeldung.maven.it.EndpointConfig
+
+
+
+ rest-servlet
+ /*
+
+
\ No newline at end of file
diff --git a/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/Integration.java b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/Integration.java
new file mode 100644
index 0000000000..112ce178ce
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/Integration.java
@@ -0,0 +1,4 @@
+package com.baeldung.maven.it;
+
+public interface Integration {
+}
diff --git a/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestIT.java b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestIT.java
new file mode 100644
index 0000000000..0115d34f1e
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestIT.java
@@ -0,0 +1,24 @@
+package com.baeldung.maven.it;
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+
+public class RestIT {
+ @Test
+ public void whenSendingGet_thenMessageIsReturned() throws IOException {
+ String url = "http://localhost:8999";
+ URLConnection connection = new URL(url).openConnection();
+ try (InputStream response = connection.getInputStream();
+ Scanner scanner = new Scanner(response)) {
+ String responseBody = scanner.nextLine();
+ assertEquals("Welcome to Baeldung!", responseBody);
+ }
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestIntegrationTest.java b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestIntegrationTest.java
new file mode 100644
index 0000000000..2f913c8429
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestIntegrationTest.java
@@ -0,0 +1,24 @@
+package com.baeldung.maven.it;
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+
+public class RestIntegrationTest {
+ @Test
+ public void whenSendingGet_thenMessageIsReturned() throws IOException {
+ String url = "http://localhost:8999";
+ URLConnection connection = new URL(url).openConnection();
+ try (InputStream response = connection.getInputStream();
+ Scanner scanner = new Scanner(response)) {
+ String responseBody = scanner.nextLine();
+ assertEquals("Welcome to Baeldung!", responseBody);
+ }
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestJUnitTest.java b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestJUnitTest.java
new file mode 100644
index 0000000000..60995d75bd
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/it/RestJUnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.maven.it;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+
+@Category(Integration.class)
+public class RestJUnitTest {
+ @Test
+ public void whenSendingGet_thenMessageIsReturned() throws IOException {
+ String url = "http://localhost:8999";
+ URLConnection connection = new URL(url).openConnection();
+ try (InputStream response = connection.getInputStream();
+ Scanner scanner = new Scanner(response)) {
+ String responseBody = scanner.nextLine();
+ assertEquals("Welcome to Baeldung!", responseBody);
+ }
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/plugins/DataCheck.java b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/plugins/DataCheck.java
new file mode 100644
index 0000000000..9aaf0fb071
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/plugins/DataCheck.java
@@ -0,0 +1,15 @@
+package com.baeldung.maven.plugins;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+
+import com.baeldung.maven.plugins.Data;
+
+public class DataCheck {
+ @Test
+ public void whenDataObjectIsCreated_thenItIsNotNull() {
+ Data data = new Data();
+ assertNotNull(data);
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/plugins/DataUnitTest.java b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/plugins/DataUnitTest.java
new file mode 100644
index 0000000000..197f977fec
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/com/baeldung/maven/plugins/DataUnitTest.java
@@ -0,0 +1,15 @@
+package com.baeldung.maven.plugins;
+
+import static org.junit.Assert.assertNull;
+
+import org.junit.Test;
+
+import com.baeldung.maven.plugins.Data;
+
+public class DataUnitTest {
+ @Test
+ public void whenDataObjectIsNotCreated_thenItIsNull() {
+ Data data = null;
+ assertNull(data);
+ }
+}
diff --git a/maven-modules/maven-integration-test/src/test/java/testfail/TestFail.java b/maven-modules/maven-integration-test/src/test/java/testfail/TestFail.java
new file mode 100644
index 0000000000..3febd21031
--- /dev/null
+++ b/maven-modules/maven-integration-test/src/test/java/testfail/TestFail.java
@@ -0,0 +1,18 @@
+package testfail;
+
+import org.junit.Test;
+import org.junit.Ignore;
+
+import static org.junit.Assert.assertNotNull;
+
+public class TestFail {
+
+ @Ignore //ignored so the entire tutorials build passes
+ @Test
+ public void whenMessageAssigned_thenItIsNotNull() {
+ String message = "hello there";
+ message = null;
+ assertNotNull(message);
+ }
+
+}