diff --git a/jetty-maven-plugin/pom.xml b/jetty-maven-plugin/pom.xml
index 335e94a2bc7e..4fb6579684b4 100644
--- a/jetty-maven-plugin/pom.xml
+++ b/jetty-maven-plugin/pom.xml
@@ -10,7 +10,9 @@
Jetty :: Jetty Maven Plugin3.0.3
- 3.1
+ 3.4
+ ${project.groupId}.maven.plugin
+ false
@@ -153,6 +155,12 @@
javax.transaction-apicompile
+
+ org.eclipse.jetty
+ jetty-client
+ ${project.version}
+ test
+
@@ -178,4 +186,44 @@
+
+
+ run-its
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+ 3.0.0
+
+
+ integration-test
+
+ install
+ integration-test
+ verify
+
+
+
+
+ ${it.debug}
+ true
+ src/it
+ ${project.build.directory}/it
+
+ */pom.xml
+
+ setup
+ verify
+ ${project.build.directory}/local-repo
+ src/it/settings.xml
+
+ clean
+
+
+
+
+
+
+
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 000000000000..e0222d4d54e9
--- /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 000000000000..c29b270cb614
--- /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 000000000000..bb6915814dfc
--- /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,44 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2016 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-webapp/pom.xml b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/pom.xml
new file mode 100644
index 000000000000..a11175216c87
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/jetty-simple-webapp/pom.xml
@@ -0,0 +1,84 @@
+
+
+ 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.eclipse.jetty
+ jetty-maven-plugin
+
+
+ start-jetty
+ test-compile
+
+ run
+
+
+ true
+ ${project.build.directory}/jetty.properties
+
+ 0
+
+
+
+
+
+
+
+
+
+
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 000000000000..2a5ac4b71bf5
--- /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 000000000000..699c31711455
--- /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,66 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2016 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;
+
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Properties;
+
+/**
+ *
+ */
+public class TestHelloServlet
+{
+ @Test
+ public void hello_servlet()
+ throws Exception
+ {
+
+ Path path = Paths.get( "target/jetty.properties" );
+ int port;
+ try (InputStream inputStream = Files.newInputStream( path ))
+ {
+ Properties properties = new Properties();
+ properties.load( inputStream );
+ port = Integer.parseInt( properties.getProperty( "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() );
+ }
+ 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 000000000000..44247ef1e751
--- /dev/null
+++ b/jetty-maven-plugin/src/it/jetty-run-mojo-it/pom.xml
@@ -0,0 +1,89 @@
+
+
+ 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
+
+
+
+ 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
+ @project.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
+ @project.version@
+
+
+
+
+
+
diff --git a/jetty-maven-plugin/src/it/settings.xml b/jetty-maven-plugin/src/it/settings.xml
new file mode 100644
index 000000000000..d64bdb89034a
--- /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 72b8bad3a952..ae15f544235d 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 @@
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.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,9 +279,14 @@ public abstract class AbstractJettyMojo extends AbstractMojo
protected Thread consoleScanner;
protected ServerSupport serverSupport;
-
-
-
+
+
+ /**
+ * Will dump port in a properties file with key port.
+ * If empty no file generated
+ * @parameter
+ */
+ protected String propertiesPortFilePath;
/**
*
@@ -287,8 +299,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 +442,13 @@ public void startJetty () throws MojoExecutionException
// if a was specified in the pom, use it
if (httpConnector != null)
{
+
// check that its port was set
- if (httpConnector.getPort() <= 0)
+ 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 +474,25 @@ public void startJetty () throws MojoExecutionException
// start Jetty
this.server.start();
- getLog().info("Started Jetty Server");
+ if (httpConnector != null)
+ {
+ int port = httpConnector.getLocalPort();
+ getLog().info( "Started Jetty Server on port: " + port );
+ if (propertiesPortFilePath != null)
+ {
+ Path propertiesPath = Paths.get( propertiesPortFilePath);
+ Files.deleteIfExists(propertiesPath);
+ try(OutputStream outputStream = Files.newOutputStream( propertiesPath ))
+ {
+ Properties properties = new Properties( );
+ properties.put( "port", Integer.toString( port ) );
+ properties.store( outputStream, "Eclipse Jetty Maven Plugin port used" );
+ }
+ }
+ } else
+ {
+ getLog().info( "Started Jetty Server" );
+ }
if ( dumpOnStart )
{
@@ -478,10 +511,11 @@ public void startJetty () throws MojoExecutionException
startConsoleScanner();
// keep the thread going if not in daemon mode
- if (!nonblocking )
+ if (!nonBlocking )
{
server.join();
}
+
}
catch (Exception e)
{
@@ -489,7 +523,7 @@ public void startJetty () throws MojoExecutionException
}
finally
{
- if (!nonblocking )
+ if (!nonBlocking )
{
getLog().info("Jetty server exiting.");
}
@@ -504,7 +538,7 @@ public void configureMonitor()
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 96ea192a5199..8a20299896ea 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 void finishConfigurationBeforeStart() throws Exception
{
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/JettyRunMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java
index 259cb0f54d07..cdedd33c9217 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
@@ -222,7 +222,7 @@ public void checkPomConfiguration () throws MojoExecutionException
{
getLog().info("Reload Mechanic: " + reload );
}
-
+ getLog().info( "nonBlocking:" + nonBlocking );
// check the classes to form a classpath with
try
@@ -566,7 +566,7 @@ public void restartWebApp(boolean reconfigureScanner) throws Exception
*/
private List getDependencyFiles()
{
- List dependencyFiles = new ArrayList();
+ List dependencyFiles = new ArrayList<>();
for ( Iterator iter = projectArtifacts.iterator(); iter.hasNext(); )
{
Artifact artifact = iter.next();
@@ -596,7 +596,7 @@ private List getDependencyFiles()
private List getDependencyProjects()
{
- List dependencyFiles = new ArrayList();
+ List dependencyFiles = new ArrayList<>();
for ( Iterator iter = projectArtifacts.iterator(); iter.hasNext(); )
{
Artifact artifact = iter.next();
@@ -656,10 +656,10 @@ private List getWarArtifacts ()
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/JettyStartMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyStartMojo.java
index ca7068c3eccc..1909536e0ee1 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/MavenServerConnector.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/MavenServerConnector.java
index 075f4d9c66bd..aed7f8dddaff 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 String getName()
{
return this.name;
}
+
+ public int getLocalPort()
+ {
+ return this.delegate.getLocalPort();
+ }
private void checkDelegate() throws IllegalStateException
{