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 Plugin 3.0.3 - 3.1 + 3.4 + ${project.groupId}.maven.plugin + false @@ -153,6 +155,12 @@ javax.transaction-api compile + + 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 + 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 {