diff --git a/Jenkinsfile b/Jenkinsfile
index 0016dc734dd..185f2d6ab31 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -53,7 +53,7 @@ node {
withEnv(mvnEnv) {
timeout(time: 90, unit: 'MINUTES') {
// Run test phase / ignore test failures
- sh "mvn -B install -Dmaven.test.failure.ignore=true"
+ sh "mvn -B install -Dmaven.test.failure.ignore=true -Prun-its"
// Report failures in the jenkins UI
step([$class: 'JUnitResultArchiver',
testResults: '**/target/surefire-reports/TEST-*.xml'])
diff --git a/jetty-maven-plugin/pom.xml b/jetty-maven-plugin/pom.xml
index aad17845263..0cf086102cd 100644
--- a/jetty-maven-plugin/pom.xml
+++ b/jetty-maven-plugin/pom.xml
@@ -13,6 +13,9 @@
3.0.33.4${project.groupId}.maven.plugin
+ false
+ FOOBEER
+
@@ -153,6 +156,12 @@
javax.transaction-apicompile
+
+ org.eclipse.jetty
+ jetty-client
+ ${project.version}
+ test
+
@@ -177,4 +186,79 @@
+
+
+ run-its
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+ 3.0.1-SNAPSHOT
+
+
+ integration-test
+
+ install
+ integration-test
+ verify
+
+
+
+
+ ${it.debug}
+ true
+ src/it
+ ${project.build.directory}/it
+
+ */pom.xml
+
+ ${project.build.directory}/local-repo
+ src/it/settings.xml
+
+ ${jetty.stopKey}
+ ${jetty.stopPort}
+ ${jetty.runPort}
+
+
+ clean
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.0.0
+
+
+ reserve-ports
+ pre-integration-test
+
+ reserve-network-port
+
+
+
+ jetty.stopPort
+ jetty.runPort
+
+
+
+
+
+
+
+
+
+ apache.snaphots
+ https://repository.apache.org/content/repositories/snapshots
+
+ false
+
+
+ true
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/invoker.properties b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/invoker.properties
new file mode 100644
index 00000000000..2fc6409821b
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/invoker.properties
@@ -0,0 +1 @@
+invoker.goals = test -fae
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/pom.xml b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/pom.xml
new file mode 100644
index 00000000000..594ddba4c8d
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-forked-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-base
+ jar
+
+ Jetty :: Simple :: Base
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ commons-io
+ commons-io
+
+
+
+ org.eclipse.jetty.toolchain
+ jetty-perf-helper
+ 1.0.5
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.1
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
new file mode 100644
index 00000000000..a6d2a3e256d
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
@@ -0,0 +1,45 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ *
+ */
+@WebServlet("/hello")
+public class HelloServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "hello " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
new file mode 100644
index 00000000000..f5686592252
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
@@ -0,0 +1,41 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class PingServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "pong " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
new file mode 100644
index 00000000000..031012f7fed
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ FragmentA
+
+
+
+
+
+
+ Ping
+ com.webtide.jetty.its.jetty_run_mojo_it.PingServlet
+
+ extra1123
+
+
+ extra2345
+
+
+
+
+ Ping
+ /ping
+
+
+
+
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/pom.xml b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/pom.xml
new file mode 100644
index 00000000000..3c6f21d22ea
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/pom.xml
@@ -0,0 +1,137 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-forked-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-webapp
+ war
+
+ Jetty :: Simple :: Webapp
+
+
+ @jetty.runPort@
+ @jetty.jvmArgs@
+
+
+
+
+
+ com.webtide.jetty.its.jetty-run-forked-mojo-it
+ jetty-simple-base
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-client
+ @project.version@
+ test
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin-version}
+
+ false
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+
+ @jetty.runPort@
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+
+ @jetty.stopPort@
+ @jetty.stopKey@
+
+
+
+ start-jetty
+ test-compile
+
+ run-forked
+
+
+ true
+ false
+ ${project.build.directory}/config/jetty.xml
+ ${jetty.jvmArgs}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.2
+
+
+ copy-resources-jetty
+ generate-resources
+
+ copy-resources
+
+
+ ${project.build.directory}/config
+
+
+ ${basedir}/src/config/
+ true
+
+ **/**
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/config/jetty.xml b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/config/jetty.xml
new file mode 100644
index 00000000000..a057f0664eb
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/config/jetty.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ https
+
+ 32768
+ 8192
+ 8192
+ 512
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 30000
+
+
+
+
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000000..2a5ac4b71bf
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,7 @@
+
+
+ Jetty Simple Webapp run-mojo-it
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
new file mode 100644
index 00000000000..f48eee38074
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
@@ -0,0 +1,58 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class TestHelloServlet
+{
+ @Test
+ public void hello_servlet()
+ throws Exception
+ {
+ int port = Integer.getInteger( "jetty.runPort" );
+ System.out.println( "port used:" + port );
+ HttpClient httpClient = new HttpClient();
+ try
+ {
+ httpClient.start();
+
+ String response = httpClient.GET( "http://localhost:" + port + "/hello?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "hello beer", response.trim() );
+
+ response = httpClient.GET( "http://localhost:" + port + "/ping?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "pong beer", response.trim() );
+ }
+ finally
+ {
+ httpClient.stop();
+ }
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/pom.xml b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/pom.xml
new file mode 100644
index 00000000000..cada3739cce
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+
+ com.webtide.jetty.its.jetty-run-forked-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+ pom
+
+ Jetty :: Simple
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.0.0
+ @project.version@
+
+
+
+ jetty-simple-base
+ jetty-simple-webapp
+
+
+
+
+
+
+ com.webtide.jetty.its.jetty-run-forked-mojo-it
+ jetty-simple-base
+ ${project.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+ commons-io
+ commons-io
+ 2.5
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ ${jetty.version}
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.1
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty.version}
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/postbuild.groovy b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/postbuild.groovy
new file mode 100644
index 00000000000..8a524044e2a
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-forked-mojo-it/postbuild.groovy
@@ -0,0 +1,13 @@
+
+
+System.out.println( "running postbuild.groovy port " + jettyStopPort + ", key:" + jettyStopKey )
+
+int port = Integer.parseInt( jettyStopPort )
+
+Socket s=new Socket(InetAddress.getByName("127.0.0.1"),port )
+s.setSoLinger(false, 0)
+
+OutputStream out=s.getOutputStream()
+out.write(( jettyStopKey +"\r\nforcestop\r\n").getBytes())
+out.flush()
+s.close()
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/invoker.properties b/jetty-maven-plugin/src/it/jetty-run-mojo-it/invoker.properties
new file mode 100644
index 00000000000..e0222d4d54e
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/invoker.properties
@@ -0,0 +1 @@
+invoker.goals = test
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/pom.xml b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/pom.xml
new file mode 100644
index 00000000000..c29b270cb61
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-base
+ jar
+
+ Jetty :: Simple :: Base
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ commons-io
+ commons-io
+
+
+
+ org.eclipse.jetty.toolchain
+ jetty-perf-helper
+ 1.0.5
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.1
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
new file mode 100644
index 00000000000..a6d2a3e256d
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
@@ -0,0 +1,45 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ *
+ */
+@WebServlet("/hello")
+public class HelloServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "hello " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
new file mode 100644
index 00000000000..f5686592252
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
@@ -0,0 +1,41 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class PingServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "pong " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
new file mode 100644
index 00000000000..031012f7fed
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ FragmentA
+
+
+
+
+
+
+ Ping
+ com.webtide.jetty.its.jetty_run_mojo_it.PingServlet
+
+ extra1123
+
+
+ extra2345
+
+
+
+
+ Ping
+ /ping
+
+
+
+
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/pom.xml b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/pom.xml
new file mode 100644
index 00000000000..ce4d50f13ec
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/pom.xml
@@ -0,0 +1,93 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-webapp
+ war
+
+ Jetty :: Simple :: Webapp
+
+
+
+
+ com.webtide.jetty.its.jetty-run-mojo-it
+ jetty-simple-base
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-client
+ @project.version@
+ test
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin-version}
+
+ false
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+
+ @jetty.runPort@
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+
+
+ start-jetty
+ test-compile
+
+ run
+
+
+ true
+
+ @jetty.runPort@
+
+
+
+
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000000..2a5ac4b71bf
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,7 @@
+
+
+ Jetty Simple Webapp run-mojo-it
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
new file mode 100644
index 00000000000..4e3ced68d91
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
@@ -0,0 +1,59 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class TestHelloServlet
+{
+ @Test
+ public void hello_servlet()
+ throws Exception
+ {
+ int port = Integer.getInteger( "jetty.runPort" );
+ System.out.println( "port used:" + port );
+ HttpClient httpClient = new HttpClient();
+ try
+ {
+ httpClient.start();
+
+ String response = httpClient.GET( "http://localhost:" + port + "/hello?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "hello beer", response.trim() );
+
+ response = httpClient.GET( "http://localhost:" + port + "/ping?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "pong beer", response.trim() );
+ }
+ finally
+ {
+ httpClient.stop();
+ }
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-mojo-it/pom.xml b/jetty-maven-plugin/src/it/jetty-run-mojo-it/pom.xml
new file mode 100644
index 00000000000..3d303f4caf8
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+
+ com.webtide.jetty.its.jetty-run-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+ pom
+
+ Jetty :: Simple
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.0.0
+ @project.version@
+
+
+
+ jetty-simple-base
+ jetty-simple-webapp
+
+
+
+
+
+
+ com.webtide.jetty.its.jetty-run-mojo-it
+ jetty-simple-base
+ ${project.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+ commons-io
+ commons-io
+ 2.5
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ ${jetty.version}
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.1
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty.version}
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/invoker.properties b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/invoker.properties
new file mode 100644
index 00000000000..161dd58f0af
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/invoker.properties
@@ -0,0 +1,2 @@
+invoker.goals = verify
+#test-compile failsafe:integration-test
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/pom.xml b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/pom.xml
new file mode 100644
index 00000000000..4425c34f117
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-war-exploded-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-base
+ jar
+
+ Jetty :: Simple :: Base
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ commons-io
+ commons-io
+
+
+
+ org.eclipse.jetty.toolchain
+ jetty-perf-helper
+ 1.0.5
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.1
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
new file mode 100644
index 00000000000..a6d2a3e256d
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
@@ -0,0 +1,45 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ *
+ */
+@WebServlet("/hello")
+public class HelloServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "hello " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
new file mode 100644
index 00000000000..f5686592252
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
@@ -0,0 +1,41 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class PingServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "pong " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
new file mode 100644
index 00000000000..031012f7fed
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ FragmentA
+
+
+
+
+
+
+ Ping
+ com.webtide.jetty.its.jetty_run_mojo_it.PingServlet
+
+ extra1123
+
+
+ extra2345
+
+
+
+
+ Ping
+ /ping
+
+
+
+
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/pom.xml b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/pom.xml
new file mode 100644
index 00000000000..0489e0e1a2c
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/pom.xml
@@ -0,0 +1,121 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-war-exploded-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-webapp
+ war
+
+ Jetty :: Simple :: Webapp
+
+
+
+
+ com.webtide.jetty.its.jetty-run-war-exploded-mojo-it
+ jetty-simple-base
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-client
+ @project.version@
+ test
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin-version}
+
+ false
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+ true
+
+ @jetty.runPort@
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ 2.20
+
+
+ @jetty.runPort@
+
+
+ **/*TestHelloServlet*
+
+
+
+
+ integration-test
+
+ integration-test
+
+
+
+ verify
+
+ verify
+
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+
+
+ start-jetty
+ test-compile
+
+ run-exploded
+
+
+ true
+
+ @jetty.runPort@
+
+
+
+
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000000..2a5ac4b71bf
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,7 @@
+
+
+ Jetty Simple Webapp run-mojo-it
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
new file mode 100644
index 00000000000..4e3ced68d91
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
@@ -0,0 +1,59 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class TestHelloServlet
+{
+ @Test
+ public void hello_servlet()
+ throws Exception
+ {
+ int port = Integer.getInteger( "jetty.runPort" );
+ System.out.println( "port used:" + port );
+ HttpClient httpClient = new HttpClient();
+ try
+ {
+ httpClient.start();
+
+ String response = httpClient.GET( "http://localhost:" + port + "/hello?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "hello beer", response.trim() );
+
+ response = httpClient.GET( "http://localhost:" + port + "/ping?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "pong beer", response.trim() );
+ }
+ finally
+ {
+ httpClient.stop();
+ }
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/pom.xml b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/pom.xml
new file mode 100644
index 00000000000..5b88c8fd196
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-exploded-mojo-it/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+
+ com.webtide.jetty.its.jetty-run-war-exploded-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+ pom
+
+ Jetty :: Simple
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.0.0
+ @project.version@
+
+
+
+ jetty-simple-base
+ jetty-simple-webapp
+
+
+
+
+
+
+ com.webtide.jetty.its.jetty-run-war-exploded-mojo-it
+ jetty-simple-base
+ ${project.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+ commons-io
+ commons-io
+ 2.5
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ ${jetty.version}
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.1
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty.version}
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/invoker.properties b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/invoker.properties
new file mode 100644
index 00000000000..161dd58f0af
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/invoker.properties
@@ -0,0 +1,2 @@
+invoker.goals = verify
+#test-compile failsafe:integration-test
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/pom.xml b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/pom.xml
new file mode 100644
index 00000000000..8903e68d8a0
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-war-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-base
+ jar
+
+ Jetty :: Simple :: Base
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ commons-io
+ commons-io
+
+
+
+ org.eclipse.jetty.toolchain
+ jetty-perf-helper
+ 1.0.5
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.1
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
new file mode 100644
index 00000000000..a6d2a3e256d
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
@@ -0,0 +1,45 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ *
+ */
+@WebServlet("/hello")
+public class HelloServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "hello " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
new file mode 100644
index 00000000000..f5686592252
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
@@ -0,0 +1,41 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class PingServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "pong " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
new file mode 100644
index 00000000000..031012f7fed
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ FragmentA
+
+
+
+
+
+
+ Ping
+ com.webtide.jetty.its.jetty_run_mojo_it.PingServlet
+
+ extra1123
+
+
+ extra2345
+
+
+
+
+ Ping
+ /ping
+
+
+
+
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/pom.xml b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/pom.xml
new file mode 100644
index 00000000000..23109b90f00
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/pom.xml
@@ -0,0 +1,121 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-run-war-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-webapp
+ war
+
+ Jetty :: Simple :: Webapp
+
+
+
+
+ com.webtide.jetty.its.jetty-run-war-mojo-it
+ jetty-simple-base
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-client
+ @project.version@
+ test
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin-version}
+
+ false
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+ true
+
+ @jetty.runPort@
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ 2.20
+
+
+ @jetty.runPort@
+
+
+ **/*TestHelloServlet*
+
+
+
+
+ integration-test
+
+ integration-test
+
+
+
+ verify
+
+ verify
+
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+
+
+ start-jetty
+ test-compile
+
+ run-war
+
+
+ true
+
+ @jetty.runPort@
+
+
+
+
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000000..2a5ac4b71bf
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,7 @@
+
+
+ Jetty Simple Webapp run-mojo-it
+
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
new file mode 100644
index 00000000000..4e3ced68d91
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
@@ -0,0 +1,59 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class TestHelloServlet
+{
+ @Test
+ public void hello_servlet()
+ throws Exception
+ {
+ int port = Integer.getInteger( "jetty.runPort" );
+ System.out.println( "port used:" + port );
+ HttpClient httpClient = new HttpClient();
+ try
+ {
+ httpClient.start();
+
+ String response = httpClient.GET( "http://localhost:" + port + "/hello?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "hello beer", response.trim() );
+
+ response = httpClient.GET( "http://localhost:" + port + "/ping?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "pong beer", response.trim() );
+ }
+ finally
+ {
+ httpClient.stop();
+ }
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/pom.xml b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/pom.xml
new file mode 100644
index 00000000000..432f0120781
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-war-mojo-it/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+
+ com.webtide.jetty.its.jetty-run-war-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+ pom
+
+ Jetty :: Simple
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.0.0
+ @project.version@
+
+
+
+ jetty-simple-base
+ jetty-simple-webapp
+
+
+
+
+
+
+ com.webtide.jetty.its.jetty-run-war-mojo-it
+ jetty-simple-base
+ ${project.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+ commons-io
+ commons-io
+ 2.5
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ ${jetty.version}
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.1
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty.version}
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/invoker.properties b/jetty-maven-plugin/src/it/jetty-start-mojo-it/invoker.properties
new file mode 100644
index 00000000000..e0222d4d54e
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/invoker.properties
@@ -0,0 +1 @@
+invoker.goals = test
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/pom.xml b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/pom.xml
new file mode 100644
index 00000000000..7a9a5382308
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-start-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-base
+ jar
+
+ Jetty :: Simple :: Base
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ commons-io
+ commons-io
+
+
+
+ org.eclipse.jetty.toolchain
+ jetty-perf-helper
+ 1.0.5
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.1
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
new file mode 100644
index 00000000000..a6d2a3e256d
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/HelloServlet.java
@@ -0,0 +1,45 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ *
+ */
+@WebServlet("/hello")
+public class HelloServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "hello " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
new file mode 100644
index 00000000000..f5686592252
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/java/com/webtide/jetty/its/jetty_run_mojo_it/PingServlet.java
@@ -0,0 +1,41 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class PingServlet
+ extends HttpServlet
+{
+
+ @Override
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ String who = req.getParameter( "name" );
+
+ resp.getWriter().write( "pong " + (who == null ? "unknown" : who) );
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
new file mode 100644
index 00000000000..031012f7fed
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-base/src/main/resources/META-INF/web-fragment.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ FragmentA
+
+
+
+
+
+
+ Ping
+ com.webtide.jetty.its.jetty_run_mojo_it.PingServlet
+
+ extra1123
+
+
+ extra2345
+
+
+
+
+ Ping
+ /ping
+
+
+
+
\ No newline at end of file
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/pom.xml b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/pom.xml
new file mode 100644
index 00000000000..38ae1555a4b
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+
+
+ com.webtide.jetty.its.jetty-start-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+
+
+ jetty-simple-webapp
+ war
+
+ Jetty :: Simple :: Webapp
+
+
+
+
+ com.webtide.jetty.its.jetty-start-mojo-it
+ jetty-simple-base
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-client
+ @project.version@
+ test
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin-version}
+
+ false
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+
+ @jetty.runPort@
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+
+
+ start-jetty
+ test-compile
+
+ start
+
+
+
+ @jetty.runPort@
+
+
+
+
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000000..2a5ac4b71bf
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,7 @@
+
+
+ Jetty Simple Webapp run-mojo-it
+
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
new file mode 100644
index 00000000000..4e3ced68d91
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/jetty-simple-webapp/src/test/java/com/webtide/jetty/its/jetty_run_mojo_it/TestHelloServlet.java
@@ -0,0 +1,59 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+
+package com.webtide.jetty.its.jetty_run_mojo_it;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class TestHelloServlet
+{
+ @Test
+ public void hello_servlet()
+ throws Exception
+ {
+ int port = Integer.getInteger( "jetty.runPort" );
+ System.out.println( "port used:" + port );
+ HttpClient httpClient = new HttpClient();
+ try
+ {
+ httpClient.start();
+
+ String response = httpClient.GET( "http://localhost:" + port + "/hello?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "hello beer", response.trim() );
+
+ response = httpClient.GET( "http://localhost:" + port + "/ping?name=beer" ).getContentAsString();
+
+ System.out.println( "httpResponse:" + response );
+
+ Assert.assertEquals( "pong beer", response.trim() );
+ }
+ finally
+ {
+ httpClient.stop();
+ }
+ }
+}
diff --git a/jetty-maven-plugin/src/it/jetty-start-mojo-it/pom.xml b/jetty-maven-plugin/src/it/jetty-start-mojo-it/pom.xml
new file mode 100644
index 00000000000..7319c0d604f
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-start-mojo-it/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+
+ com.webtide.jetty.its.jetty-start-mojo-it
+ jetty-simple-project
+ 0.0.1-SNAPSHOT
+ pom
+
+ Jetty :: Simple
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.0.0
+ @project.version@
+
+
+
+ jetty-simple-base
+ jetty-simple-webapp
+
+
+
+
+
+
+ com.webtide.jetty.its.jetty-start-mojo-it
+ jetty-simple-base
+ ${project.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ jar
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+ commons-io
+ commons-io
+ 2.5
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ ${jetty.version}
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.1
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ ${jetty.version}
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/settings.xml b/jetty-maven-plugin/src/it/settings.xml
new file mode 100644
index 00000000000..d64bdb89034
--- /dev/null
+++ b/jetty-maven-plugin/src/it/settings.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ it-repo
+
+ true
+
+
+
+ local.central
+ @localRepositoryUrl@
+
+ true
+
+
+ true
+
+
+
+
+
+ local.central
+ @localRepositoryUrl@
+
+ true
+
+
+ true
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/AbstractJettyMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/AbstractJettyMojo.java
index 72b8bad3a95..ef9dbb2674a 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/AbstractJettyMojo.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/AbstractJettyMojo.java
@@ -21,9 +21,13 @@ package org.eclipse.jetty.maven.plugin;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
+import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
@@ -36,11 +40,14 @@ import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.FileUtils;
import org.eclipse.jetty.security.LoginService;
+import org.eclipse.jetty.server.NetworkConnector;
import org.eclipse.jetty.server.RequestLog;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.ShutdownMonitor;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
@@ -272,10 +279,7 @@ public abstract class AbstractJettyMojo extends AbstractMojo
protected Thread consoleScanner;
protected ServerSupport serverSupport;
-
-
-
-
+
/**
*
* Determines whether or not the server blocks when started. The default
@@ -287,8 +291,9 @@ public abstract class AbstractJettyMojo extends AbstractMojo
* If true, the server will not block the execution of subsequent code. This
* is the behaviour of the jetty:start and default behaviour of the jetty:deploy goals.
*
+ * @parameter default-value="false"
*/
- protected boolean nonblocking = false;
+ protected boolean nonBlocking = false;
public abstract void restartWebApp(boolean reconfigureScanner) throws Exception;
@@ -429,11 +434,13 @@ public abstract class AbstractJettyMojo extends AbstractMojo
// if a was specified in the pom, use it
if (httpConnector != null)
{
+
// check that its port was set
if (httpConnector.getPort() <= 0)
{
//use any jetty.http.port settings provided
- String tmp = System.getProperty(MavenServerConnector.PORT_SYSPROPERTY, System.getProperty("jetty.port", MavenServerConnector.DEFAULT_PORT_STR));
+ String tmp = System.getProperty(MavenServerConnector.PORT_SYSPROPERTY, //
+ System.getProperty("jetty.port", MavenServerConnector.DEFAULT_PORT_STR));
httpConnector.setPort(Integer.parseInt(tmp.trim()));
}
httpConnector.setServer(server);
@@ -459,7 +466,7 @@ public abstract class AbstractJettyMojo extends AbstractMojo
// start Jetty
this.server.start();
- getLog().info("Started Jetty Server");
+ getLog().info( "Started Jetty Server" );
if ( dumpOnStart )
{
@@ -478,10 +485,11 @@ public abstract class AbstractJettyMojo extends AbstractMojo
startConsoleScanner();
// keep the thread going if not in daemon mode
- if (!nonblocking )
+ if (!nonBlocking )
{
server.join();
}
+
}
catch (Exception e)
{
@@ -489,7 +497,7 @@ public abstract class AbstractJettyMojo extends AbstractMojo
}
finally
{
- if (!nonblocking )
+ if (!nonBlocking )
{
getLog().info("Jetty server exiting.");
}
@@ -504,7 +512,7 @@ public abstract class AbstractJettyMojo extends AbstractMojo
ShutdownMonitor monitor = ShutdownMonitor.getInstance();
monitor.setPort(stopPort);
monitor.setKey(stopKey);
- monitor.setExitVm(!nonblocking);
+ monitor.setExitVm(!nonBlocking );
}
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyDeployWar.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyDeployWar.java
index 96ea192a519..8a20299896e 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyDeployWar.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyDeployWar.java
@@ -61,7 +61,7 @@ public class JettyDeployWar extends JettyRunWarMojo
@Override
public void execute() throws MojoExecutionException, MojoFailureException
{
- nonblocking = daemon;
+ nonBlocking = daemon;
super.execute();
}
@@ -72,7 +72,7 @@ public class JettyDeployWar extends JettyRunWarMojo
{
super.finishConfigurationBeforeStart();
//only stop the server at shutdown if we are blocking
- server.setStopAtShutdown(!nonblocking);
+ server.setStopAtShutdown(!nonBlocking );
}
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunForkedMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunForkedMojo.java
index c4d03008abf..4de7f20ae53 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunForkedMojo.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunForkedMojo.java
@@ -18,6 +18,17 @@
package org.eclipse.jetty.maven.plugin;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.eclipse.jetty.annotations.AnnotationConfiguration;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.util.IO;
+import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceCollection;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
+
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
@@ -40,17 +51,6 @@ import java.util.Properties;
import java.util.Random;
import java.util.Set;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.descriptor.PluginDescriptor;
-import org.eclipse.jetty.annotations.AnnotationConfiguration;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.util.IO;
-import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.util.resource.ResourceCollection;
-import org.eclipse.jetty.util.thread.QueuedThreadPool;
-
/**
* This goal is used to deploy your unassembled webapp into a forked JVM.
@@ -169,10 +169,17 @@ public class JettyRunForkedMojo extends JettyRunMojo
}
}
}
-
-
-
+
+ /**
+ * we o
+ */
+// protected MavenProject getProjectReferences( Artifact artifact, MavenProject project )
+// {
+//
+// return null;
+// }
+
/**
* ConsoleStreamer
*
@@ -349,7 +356,7 @@ public class JettyRunForkedMojo extends JettyRunMojo
builder.directory(project.getBasedir());
if (PluginLog.getLog().isDebugEnabled())
- PluginLog.getLog().debug(Arrays.toString(cmd.toArray()));
+ PluginLog.getLog().debug("Forked cli:"+Arrays.toString(cmd.toArray()));
PluginLog.getLog().info("Forked process starting");
@@ -510,6 +517,19 @@ public class JettyRunForkedMojo extends JettyRunMojo
props.put("testClasses.dir", webApp.getTestClasses().getAbsolutePath());
}
+ if ( !webApp.getClassPathFiles().isEmpty() )
+ {
+ StringBuilder stringBuilder = new StringBuilder();
+ for ( File dependency : webApp.getClassPathFiles() )
+ {
+ if (dependency.isDirectory())
+ {
+ stringBuilder.append( dependency.getCanonicalPath() ).append( '|' );
+ }
+ }
+ props.put( "projects.classes.dir", stringBuilder.toString() );
+ }
+
//web-inf lib
List deps = webApp.getWebInfLib();
StringBuffer strbuff = new StringBuffer();
@@ -578,7 +598,7 @@ public class JettyRunForkedMojo extends JettyRunMojo
List warArtifacts = new ArrayList();
for ( Iterator iter = project.getArtifacts().iterator(); iter.hasNext(); )
{
- Artifact artifact = (Artifact) iter.next();
+ Artifact artifact = iter.next();
if (artifact.getType().equals("war"))
warArtifacts.add(artifact);
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java
index 259cb0f54d0..94102e9db95 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java
@@ -40,6 +40,8 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
/**
* This goal is used in-situ on a Maven project without first requiring that the project
@@ -222,7 +224,7 @@ public class JettyRunMojo extends AbstractJettyMojo
{
getLog().info("Reload Mechanic: " + reload );
}
-
+ getLog().info( "nonBlocking:" + nonBlocking );
// check the classes to form a classpath with
try
@@ -281,14 +283,22 @@ public class JettyRunMojo extends AbstractJettyMojo
if (useTestScope && (testClassesDirectory != null))
webApp.setTestClasses (testClassesDirectory);
- webApp.getClassPathFiles().addAll( getDependencyProjects() );
+ List dependencyProjects = getDependencyProjects();
+ webApp.getClassPathFiles().addAll( dependencyProjects );
+ List dependencyResources = //
+ dependencyProjects.stream() //
+ .map( file -> Resource.newResource( file ) ) //
+ .collect( Collectors.toList() );
+ webApp.getMetaData().getContainerResources().addAll( dependencyResources );
webApp.setWebInfLib (getDependencyFiles());
-
+// webApp.getWebInfLib().addAll( dependencyResources //
+// .stream() //
+// .map( resource -> toFile(resource) ) //
+// .collect( Collectors.toList() ) );
+ webApp.getDependentProjects().addAll( dependencyResources );
//get copy of a list of war artifacts
Set matchedWarArtifacts = new HashSet();
-
-
//process any overlays and the war type artifacts
List overlays = new ArrayList();
for (OverlayConfig config:warPluginInfo.getMavenWarOverlayConfigs())
@@ -367,7 +377,17 @@ public class JettyRunMojo extends AbstractJettyMojo
getLog().info("Webapp directory = " + webAppSourceDirectory.getCanonicalPath());
}
-
+ private static File toFile(Resource resource)
+ {
+ try
+ {
+ return resource.getFile();
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( e.getMessage(), e );
+ }
+ }
/**
@@ -566,7 +586,7 @@ public class JettyRunMojo extends AbstractJettyMojo
*/
private List getDependencyFiles()
{
- List dependencyFiles = new ArrayList();
+ List dependencyFiles = new ArrayList<>();
for ( Iterator iter = projectArtifacts.iterator(); iter.hasNext(); )
{
Artifact artifact = iter.next();
@@ -596,7 +616,7 @@ public class JettyRunMojo extends AbstractJettyMojo
private List getDependencyProjects()
{
- List dependencyFiles = new ArrayList();
+ List dependencyFiles = new ArrayList<>();
for ( Iterator iter = projectArtifacts.iterator(); iter.hasNext(); )
{
Artifact artifact = iter.next();
@@ -626,7 +646,7 @@ public class JettyRunMojo extends AbstractJettyMojo
}
- private MavenProject getProjectReferences( Artifact artifact, MavenProject project )
+ protected MavenProject getProjectReferences( Artifact artifact, MavenProject project )
{
if ( project.getProjectReferences() == null || project.getProjectReferences().isEmpty() )
{
@@ -656,10 +676,10 @@ public class JettyRunMojo extends AbstractJettyMojo
if (warArtifacts != null)
return warArtifacts;
- warArtifacts = new ArrayList();
+ warArtifacts = new ArrayList<>();
for ( Iterator iter = projectArtifacts.iterator(); iter.hasNext(); )
{
- Artifact artifact = (Artifact) iter.next();
+ Artifact artifact = iter.next();
if (artifact.getType().equals("war") || artifact.getType().equals("zip"))
{
try
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarMojo.java
index 46249291769..aa81cb021d3 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarMojo.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarMojo.java
@@ -61,6 +61,10 @@ public class JettyRunWarMojo extends AbstractJettyMojo
*/
public void execute() throws MojoExecutionException, MojoFailureException
{
+ if ( !"war".equals( project.getPackaging() ) || skip )
+ {
+ return;
+ }
super.execute();
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyStartMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyStartMojo.java
index ca7068c3ecc..1909536e0ee 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyStartMojo.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyStartMojo.java
@@ -44,7 +44,7 @@ public class JettyStartMojo extends JettyRunMojo
@Override
public void execute() throws MojoExecutionException, MojoFailureException
{
- nonblocking = true; //ensure that starting jetty won't hold up the thread
+ nonBlocking = true; //ensure that starting jetty won't hold up the thread
super.execute();
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyWebAppContext.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyWebAppContext.java
index a27903ceed5..3ec20ce8081 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyWebAppContext.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyWebAppContext.java
@@ -104,9 +104,7 @@ public class JettyWebAppContext extends WebAppContext
private Resource _quickStartWebXml;
private String _originAttribute;
private boolean _generateOrigin;
-
-
-
+ private List dependentProjects = new ArrayList<>();
/**
* Set the "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern" with a pattern for matching jars on
@@ -321,6 +319,11 @@ public class JettyWebAppContext extends WebAppContext
{
return _webInfJars;
}
+
+ public List getDependentProjects()
+ {
+ return dependentProjects;
+ }
/* ------------------------------------------------------------ */
public void setGenerateQuickStart (boolean quickStart)
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenServerConnector.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenServerConnector.java
index 075f4d9c66b..aed7f8dddaf 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenServerConnector.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenServerConnector.java
@@ -270,6 +270,11 @@ public class MavenServerConnector extends ContainerLifeCycle implements Connecto
{
return this.name;
}
+
+ public int getLocalPort()
+ {
+ return this.delegate.getLocalPort();
+ }
private void checkDelegate() throws IllegalStateException
{
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenWebInfConfiguration.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenWebInfConfiguration.java
index 2ea7443713e..440238d22b4 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenWebInfConfiguration.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenWebInfConfiguration.java
@@ -93,6 +93,8 @@ public class MavenWebInfConfiguration extends WebInfConfiguration
public void preConfigure(WebAppContext context) throws Exception
{
super.preConfigure(context);
+ ((JettyWebAppContext)context).getDependentProjects()
+ .stream().forEach( resource -> context.getMetaData().addWebInfJar( resource ) );
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ServerSupport.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ServerSupport.java
index eeda81108f0..3b0512ced41 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ServerSupport.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ServerSupport.java
@@ -164,7 +164,7 @@ public class ServerSupport
if (server == null)
return null;
- return (ContextHandlerCollection)server.getChildHandlerByClass(ContextHandlerCollection.class);
+ return server.getChildHandlerByClass(ContextHandlerCollection.class);
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/Starter.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/Starter.java
index 040a58202cf..88f542db616 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/Starter.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/Starter.java
@@ -22,7 +22,9 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
+import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
@@ -30,6 +32,8 @@ import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
@@ -174,31 +178,31 @@ public class Starter
//apply a properties file that defines the things that we configure in the jetty:run plugin:
// - the context path
- String str = (String)props.get("context.path");
+ String str = props.getProperty("context.path");
if (str != null)
webApp.setContextPath(str);
// - web.xml
- str = (String)props.get("web.xml");
+ str = props.getProperty("web.xml");
if (str != null)
webApp.setDescriptor(str);
- str = (String)props.get("quickstart.web.xml");
+ str = props.getProperty("quickstart.web.xml");
if (str != null)
webApp.setQuickStartWebDescriptor(Resource.newResource(new File(str)));
// - the tmp directory
- str = (String)props.getProperty("tmp.dir");
+ str = props.getProperty("tmp.dir");
if (str != null)
webApp.setTempDirectory(new File(str.trim()));
- str = (String)props.getProperty("tmp.dir.persist");
+ str = props.getProperty("tmp.dir.persist");
if (str != null)
webApp.setPersistTempDirectory(Boolean.valueOf(str));
//Get the calculated base dirs which includes the overlays
- str = (String)props.getProperty("base.dirs");
+ str = props.getProperty("base.dirs");
if (str != null && !"".equals(str.trim()))
{
ResourceCollection bases = new ResourceCollection(StringUtil.csvSplit(str));
@@ -207,7 +211,7 @@ public class Starter
}
//Get the original base dirs without the overlays
- str = (String)props.get("base.dirs.orig");
+ str = props.getProperty("base.dirs.orig");
if (str != null && !"".equals(str.trim()))
{
ResourceCollection bases = new ResourceCollection(StringUtil.csvSplit(str));
@@ -215,9 +219,9 @@ public class Starter
}
//For overlays
- str = (String)props.getProperty("maven.war.includes");
+ str = props.getProperty("maven.war.includes");
List defaultWarIncludes = fromCSV(str);
- str = (String)props.getProperty("maven.war.excludes");
+ str = props.getProperty("maven.war.excludes");
List defaultWarExcludes = fromCSV(str);
//List of war artifacts
@@ -246,7 +250,7 @@ public class Starter
Set matchedWars = new HashSet();
//process any overlays and the war type artifacts
- List overlays = new ArrayList();
+ List overlays = new ArrayList<>();
for (OverlayConfig config:orderedConfigs.values())
{
//overlays can be individually skipped
@@ -288,21 +292,20 @@ public class Starter
// - the equivalent of web-inf classes
- str = (String)props.getProperty("classes.dir");
+ str = props.getProperty("classes.dir");
if (str != null && !"".equals(str.trim()))
{
webApp.setClasses(new File(str));
}
- str = (String)props.getProperty("testClasses.dir");
+ str = props.getProperty("testClasses.dir");
if (str != null && !"".equals(str.trim()))
{
webApp.setTestClasses(new File(str));
}
-
// - the equivalent of web-inf lib
- str = (String)props.getProperty("lib.jars");
+ str = props.getProperty("lib.jars");
if (str != null && !"".equals(str.trim()))
{
List jars = new ArrayList();
@@ -311,6 +314,15 @@ public class Starter
jars.add(new File(names[j].trim()));
webApp.setWebInfLib(jars);
}
+
+ str = props.getProperty( "projects.classes.dir" );
+ if (str != null && !"".equals(str.trim()))
+ {
+ List classesDirectories = //
+ Arrays.stream(str.split( Pattern.quote("|") )) //
+ .map( s -> Paths.get( s).toFile() ).collect( Collectors.toList() );
+ webApp.getWebInfLib().addAll( classesDirectories );
+ }
}
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaInfConfiguration.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaInfConfiguration.java
index ea973624719..e06a55cda1e 100644
--- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaInfConfiguration.java
+++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaInfConfiguration.java
@@ -276,8 +276,7 @@ public class MetaInfConfiguration extends AbstractConfiguration
if (LOG.isDebugEnabled()) LOG.debug(jar+" META-INF/web-fragment.xml checked");
if (jar.isDirectory())
{
- //TODO ????
- webFrag = jar.addPath("/META-INF/web-fragment.xml");
+ webFrag = Resource.newResource( new File (jar.getFile(),"/META-INF/web-fragment.xml"));
}
else
{
diff --git a/tests/test-webapps/test-servlet-spec/test-web-fragment/src/main/resources/META-INF/web-fragment.xml b/tests/test-webapps/test-servlet-spec/test-web-fragment/src/main/resources/META-INF/web-fragment.xml
index a85aea5f030..ae015f2712c 100644
--- a/tests/test-webapps/test-servlet-spec/test-web-fragment/src/main/resources/META-INF/web-fragment.xml
+++ b/tests/test-webapps/test-servlet-spec/test-web-fragment/src/main/resources/META-INF/web-fragment.xml
@@ -32,7 +32,6 @@
Fragment/fragment/*
-