Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2015-06-17 03:18:56 +0000
committerJan Bartel2015-06-17 03:18:56 +0000
commit1f3be625e62f44d929c01f6574678eea05754474 (patch)
tree44f91b2c251bb7b8ac02b15fcee263bb1d3a13b5 /jetty-maven-plugin
parentecdcc2e7c0fa1d30b747c6efa765423e6447c88e (diff)
downloadorg.eclipse.jetty.project-1f3be625e62f44d929c01f6574678eea05754474.tar.gz
org.eclipse.jetty.project-1f3be625e62f44d929c01f6574678eea05754474.tar.xz
org.eclipse.jetty.project-1f3be625e62f44d929c01f6574678eea05754474.zip
462346 Add pattern to jetty:run default classes and test classes scan paths
Diffstat (limited to 'jetty-maven-plugin')
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/AbstractJettyMojo.java69
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyDeployWar.java5
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java282
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarExplodedMojo.java59
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarMojo.java36
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanPattern.java53
-rw-r--r--jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanTargetPattern.java23
7 files changed, 300 insertions, 227 deletions
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 9eed62d44f..5a37d025cf 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
@@ -45,7 +45,7 @@ import org.eclipse.jetty.server.ShutdownMonitor;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.util.Scanner;
+import org.eclipse.jetty.util.PathWatcher;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.xml.XmlConfiguration;
@@ -261,20 +261,9 @@ public abstract class AbstractJettyMojo extends AbstractMojo
/**
* A scanner to check for changes to the webapp
*/
- protected Scanner scanner;
+ protected PathWatcher scanner;
- /**
- * List of files and directories to scan
- */
- protected ArrayList<File> scanList;
-
-
- /**
- * List of Listeners for the scanner
- */
- protected ArrayList<Scanner.BulkListener> scannerListeners;
-
/**
* A scanner to check ENTER hits on the console
@@ -467,16 +456,20 @@ public abstract class AbstractJettyMojo extends AbstractMojo
this.server.start();
getLog().info("Started Jetty Server");
-
+
if ( dumpOnStart )
{
getLog().info(this.server.dump());
}
-
+
// start the scanner thread (if necessary) on the main webapp
- configureScanner ();
- startScanner();
-
+ if (isScanningEnabled())
+ {
+ scanner = new PathWatcher();
+ configureScanner ();
+ startScanner();
+ }
+
// start the new line scanner thread if necessary
startConsoleScanner();
@@ -572,33 +565,33 @@ public abstract class AbstractJettyMojo extends AbstractMojo
* files change.
*
*/
- private void startScanner() throws Exception
+ public void startScanner() throws Exception
{
- // check if scanning is enabled
- if (scanIntervalSeconds <= 0) return;
-
- // check if reload is manual. It disables file scanning
- if ( "manual".equalsIgnoreCase( reload ) )
- {
- // issue a warning if both scanIntervalSeconds and reload
- // are enabled
- getLog().warn("scanIntervalSeconds is set to " + scanIntervalSeconds + " but will be IGNORED due to manual reloading");
+ if (!isScanningEnabled())
return;
- }
- scanner = new Scanner();
- scanner.setReportExistingFilesOnStartup(false);
- scanner.setScanInterval(scanIntervalSeconds);
- scanner.setScanDirs(scanList);
- scanner.setRecursive(true);
- Iterator itor = (this.scannerListeners==null?null:this.scannerListeners.iterator());
- while (itor!=null && itor.hasNext())
- scanner.addListener((Scanner.Listener)itor.next());
- getLog().info("Starting scanner at interval of " + scanIntervalSeconds + " seconds.");
+ scanner.setNotifyExistingOnStart(false);
+
+
scanner.start();
}
+ public boolean isScanningEnabled ()
+ {
+ if (scanIntervalSeconds <=0 || "manual".equalsIgnoreCase( reload ))
+ return false;
+ return true;
+ }
+
+ public void stopScanner() throws Exception
+ {
+ if (!isScanningEnabled())
+ return;
+
+ if (scanner != null)
+ scanner.stop();
+ }
/**
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 48d776208b..67fb8eefcf 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
@@ -18,8 +18,6 @@
package org.eclipse.jetty.maven.plugin;
-import java.io.File;
-
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
@@ -74,8 +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/JettyRunMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunMojo.java
index 4b8307168f..763496e613 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
@@ -31,8 +31,8 @@ import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.codehaus.plexus.util.FileUtils;
-import org.eclipse.jetty.util.Scanner;
+import org.eclipse.jetty.util.PathWatcher;
+import org.eclipse.jetty.util.PathWatcher.PathWatchEvent;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;
@@ -94,6 +94,14 @@ public class JettyRunMojo extends AbstractJettyMojo
*/
protected File classesDirectory;
+ /**
+ * An optional pattern for includes/excludes of classes in the classesDirectory
+ * @parameter
+ */
+ protected ScanPattern classesPattern;
+
+
+
/**
* The directory containing generated test classes.
@@ -103,6 +111,13 @@ public class JettyRunMojo extends AbstractJettyMojo
*/
protected File testClassesDirectory;
+ /**
+ * An optional pattern for includes/excludes of classes in the testClassesDirectory
+ * @parameter
+ */
+ protected ScanPattern testClassesPattern;
+
+
/**
* Root directory for all html/jsp etc files
@@ -130,12 +145,6 @@ public class JettyRunMojo extends AbstractJettyMojo
/**
- * Extra scan targets as a list
- */
- protected List<File> extraScanTargets;
-
-
- /**
* maven-war-plugin reference
*/
protected WarPluginInfo warPluginInfo;
@@ -226,59 +235,6 @@ public class JettyRunMojo extends AbstractJettyMojo
{
throw new MojoExecutionException("Location of classesDirectory does not exist");
}
-
- extraScanTargets = new ArrayList<File>();
- if (scanTargets != null)
- {
- for (int i=0; i< scanTargets.length; i++)
- {
- getLog().info("Added extra scan target:"+ scanTargets[i]);
- extraScanTargets.add(scanTargets[i]);
- }
- }
-
- if (scanTargetPatterns!=null)
- {
- for (int i=0;i<scanTargetPatterns.length; i++)
- {
- Iterator itor = scanTargetPatterns[i].getIncludes().iterator();
- StringBuffer strbuff = new StringBuffer();
- while (itor.hasNext())
- {
- strbuff.append((String)itor.next());
- if (itor.hasNext())
- strbuff.append(",");
- }
- String includes = strbuff.toString();
-
- itor = scanTargetPatterns[i].getExcludes().iterator();
- strbuff= new StringBuffer();
- while (itor.hasNext())
- {
- strbuff.append((String)itor.next());
- if (itor.hasNext())
- strbuff.append(",");
- }
- String excludes = strbuff.toString();
-
- try
- {
- List<File> files = FileUtils.getFiles(scanTargetPatterns[i].getDirectory(), includes, excludes);
- itor = files.iterator();
- while (itor.hasNext())
- getLog().info("Adding extra scan target from pattern: "+itor.next());
- List<File> currentTargets = extraScanTargets;
- if(currentTargets!=null && !currentTargets.isEmpty())
- currentTargets.addAll(files);
- else
- extraScanTargets = files;
- }
- catch (IOException e)
- {
- throw new MojoExecutionException(e.getMessage());
- }
- }
- }
}
@@ -323,9 +279,7 @@ public class JettyRunMojo extends AbstractJettyMojo
//get copy of a list of war artifacts
Set<Artifact> matchedWarArtifacts = new HashSet<Artifact>();
- //make sure each of the war artifacts is added to the scanner
- for (Artifact a:getWarArtifacts())
- extraScanTargets.add(a.getFile());
+
//process any overlays and the war type artifacts
List<Overlay> overlays = new ArrayList<Overlay>();
@@ -414,90 +368,157 @@ public class JettyRunMojo extends AbstractJettyMojo
public void configureScanner ()
throws MojoExecutionException
{
- // start the scanner thread (if necessary) on the main webapp
- scanList = new ArrayList<File>();
- if (webApp.getDescriptor() != null)
+ try
{
- try (Resource r = Resource.newResource(webApp.getDescriptor());)
- {
- scanList.add(r.getFile());
- }
- catch (IOException e)
- {
- throw new MojoExecutionException("Problem configuring scanner for web.xml", e);
- }
+ gatherScannables();
+ }
+ catch (Exception e)
+ {
+ throw new MojoExecutionException("Error forming scan list", e);
}
- if (webApp.getJettyEnvXml() != null)
+ scanner.addListener(new PathWatcher.EventListListener()
{
- try (Resource r = Resource.newResource(webApp.getJettyEnvXml());)
- {
- scanList.add(r.getFile());
- }
- catch (IOException e)
+
+ @Override
+ public void onPathWatchEvents(List<PathWatchEvent> events)
{
- throw new MojoExecutionException("Problem configuring scanner for jetty-env.xml", e);
+ try
+ {
+ boolean reconfigure = false;
+ if (events != null)
+ {
+ for (PathWatchEvent e:events)
+ {
+ if (e.getPath().equals(project.getFile().toPath()))
+ {
+ reconfigure = true;
+ break;
+ }
+ }
+ }
+
+ restartWebApp(reconfigure);
+ }
+ catch (Exception e)
+ {
+ getLog().error("Error reconfiguring/restarting webapp after change in watched files",e);
+ }
}
+ });
+ }
+
+
+ public void gatherScannables() throws Exception
+ {
+ if (webApp.getDescriptor() != null)
+ {
+ Resource r = Resource.newResource(webApp.getDescriptor());
+ scanner.watch(r.getFile().toPath());
}
+
+ if (webApp.getJettyEnvXml() != null)
+ scanner.watch(new File(webApp.getJettyEnvXml()).toPath());
if (webApp.getDefaultsDescriptor() != null)
{
- try (Resource r = Resource.newResource(webApp.getDefaultsDescriptor());)
- {
- if (!WebAppContext.WEB_DEFAULTS_XML.equals(webApp.getDefaultsDescriptor()))
- scanList.add(r.getFile());
- }
- catch (IOException e)
+ if (!WebAppContext.WEB_DEFAULTS_XML.equals(webApp.getDefaultsDescriptor()))
+ scanner.watch(new File(webApp.getDefaultsDescriptor()).toPath());
+ }
+
+ if (webApp.getOverrideDescriptor() != null)
+ {
+ scanner.watch(new File(webApp.getOverrideDescriptor()).toPath());
+ }
+
+ File jettyWebXmlFile = findJettyWebXmlFile(new File(webAppSourceDirectory,"WEB-INF"));
+ if (jettyWebXmlFile != null)
+ {
+ scanner.watch(jettyWebXmlFile.toPath());
+ }
+
+ //make sure each of the war artifacts is added to the scanner
+ for (Artifact a:getWarArtifacts())
+ {
+ scanner.watch(a.getFile().toPath());
+ }
+
+ //handle the explicit extra scan targets
+ if (scanTargets != null)
+ {
+ for (File f:scanTargets)
{
- throw new MojoExecutionException("Problem configuring scanner for webdefaults.xml", e);
+ if (f.isDirectory())
+ {
+ PathWatcher.Config config = new PathWatcher.Config(f.toPath());
+ config.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ scanner.watch(config);
+ }
+ else
+ scanner.watch(f.toPath());
}
}
- if (webApp.getOverrideDescriptor() != null)
+ //handle the extra scan patterns
+ if (scanTargetPatterns != null)
{
- try (Resource r = Resource.newResource(webApp.getOverrideDescriptor());)
+ for (ScanTargetPattern p:scanTargetPatterns)
{
- scanList.add(r.getFile());
+ PathWatcher.Config config = new PathWatcher.Config(p.getDirectory().toPath());
+ config.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ for (String pattern:p.getExcludes())
+ config.addExcludeGlobRelative(pattern);
+ for (String pattern:p.getIncludes())
+ config.addIncludeGlobRelative(pattern);
+ scanner.watch(config);
}
- catch (IOException e)
+ }
+
+
+ scanner.watch(project.getFile().toPath());
+
+ if (webApp.getTestClasses() != null)
+ {
+ PathWatcher.Config config = new PathWatcher.Config(webApp.getTestClasses().toPath());
+ config.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ if (testClassesPattern != null)
{
- throw new MojoExecutionException("Problem configuring scanner for webdefaults.xml", e);
+ for (String p:testClassesPattern.getExcludes())
+ config.addExcludeGlobRelative(p);
+ for (String p:testClassesPattern.getIncludes())
+ config.addIncludeGlobRelative(p);
}
+ scanner.watch(config);
}
-
- File jettyWebXmlFile = findJettyWebXmlFile(new File(webAppSourceDirectory,"WEB-INF"));
- if (jettyWebXmlFile != null)
- scanList.add(jettyWebXmlFile);
- scanList.addAll(extraScanTargets);
- scanList.add(project.getFile());
- if (webApp.getTestClasses() != null)
- scanList.add(webApp.getTestClasses());
if (webApp.getClasses() != null)
- scanList.add(webApp.getClasses());
- scanList.addAll(webApp.getWebInfLib());
-
- scannerListeners = new ArrayList<Scanner.BulkListener>();
- scannerListeners.add(new Scanner.BulkListener()
{
- public void filesChanged (List changes)
+ PathWatcher.Config config = new PathWatcher.Config(webApp.getClasses().toPath());
+ config.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ if (classesPattern != null)
{
- try
- {
- boolean reconfigure = changes.contains(project.getFile().getCanonicalPath());
- restartWebApp(reconfigure);
- }
- catch (Exception e)
- {
- getLog().error("Error reconfiguring/restarting webapp after change in watched files",e);
- }
+ for (String p:classesPattern.getExcludes())
+ config.addExcludeGlobRelative(p);
+
+ for (String p:classesPattern.getIncludes())
+ config.addIncludeGlobRelative(p);
+
}
- });
+ scanner.watch(config);
+ }
+
+ if (webApp.getWebInfLib() != null)
+ {
+ for (File f:webApp.getWebInfLib())
+ {
+ PathWatcher.Config config = new PathWatcher.Config(f.toPath());
+ config.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ scanner.watch(config);
+ }
+ }
}
-
-
/**
* @see org.eclipse.jetty.maven.plugin.AbstractJettyMojo#restartWebApp(boolean)
*/
@@ -505,7 +526,9 @@ public class JettyRunMojo extends AbstractJettyMojo
{
getLog().info("restarting "+webApp);
getLog().debug("Stopping webapp ...");
+ stopScanner();
webApp.stop();
+
getLog().debug("Reconfiguring webapp ...");
checkPomConfiguration();
@@ -516,23 +539,14 @@ public class JettyRunMojo extends AbstractJettyMojo
if (reconfigureScanner)
{
getLog().info("Reconfiguring scanner after change to pom.xml ...");
- scanList.clear();
- if (webApp.getDescriptor() != null)
- scanList.add(new File(webApp.getDescriptor()));
- if (webApp.getJettyEnvXml() != null)
- scanList.add(new File(webApp.getJettyEnvXml()));
- scanList.addAll(extraScanTargets);
- scanList.add(project.getFile());
- if (webApp.getTestClasses() != null)
- scanList.add(webApp.getTestClasses());
- if (webApp.getClasses() != null)
- scanList.add(webApp.getClasses());
- scanList.addAll(webApp.getWebInfLib());
- scanner.setScanDirs(scanList);
+ scanner.reset();
+ warArtifacts = null;
+ configureScanner();
}
getLog().debug("Restarting webapp ...");
webApp.start();
+ startScanner();
getLog().info("Restart completed at "+new Date().toString());
}
@@ -582,7 +596,7 @@ public class JettyRunMojo extends AbstractJettyMojo
warArtifacts = new ArrayList<Artifact>();
for ( Iterator<Artifact> iter = projectArtifacts.iterator(); iter.hasNext(); )
{
- Artifact artifact = (Artifact) iter.next();
+ Artifact 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/JettyRunWarExplodedMojo.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarExplodedMojo.java
index c3beb38c8c..66fb19bc80 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarExplodedMojo.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/JettyRunWarExplodedMojo.java
@@ -19,12 +19,12 @@
package org.eclipse.jetty.maven.plugin;
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.eclipse.jetty.util.Scanner;
+import org.eclipse.jetty.util.PathWatcher;
+import org.eclipse.jetty.util.PathWatcher.PathWatchEvent;
/**
*
@@ -96,27 +96,41 @@ public class JettyRunWarExplodedMojo extends AbstractJettyMojo
*/
public void configureScanner() throws MojoExecutionException
{
- scanList = new ArrayList<File>();
- scanList.add(project.getFile());
+ scanner.watch(project.getFile().toPath());
File webInfDir = new File(war,"WEB-INF");
- scanList.add(new File(webInfDir, "web.xml"));
+ scanner.watch(new File(webInfDir, "web.xml").toPath());
File jettyWebXmlFile = findJettyWebXmlFile(webInfDir);
if (jettyWebXmlFile != null)
- scanList.add(jettyWebXmlFile);
+ scanner.watch(jettyWebXmlFile.toPath());
File jettyEnvXmlFile = new File(webInfDir, "jetty-env.xml");
if (jettyEnvXmlFile.exists())
- scanList.add(jettyEnvXmlFile);
- scanList.add(new File(webInfDir, "classes"));
- scanList.add(new File(webInfDir, "lib"));
-
- scannerListeners = new ArrayList<Scanner.BulkListener>();
- scannerListeners.add(new Scanner.BulkListener()
+ scanner.watch(jettyEnvXmlFile.toPath());
+
+ PathWatcher.Config classesConfig = new PathWatcher.Config(new File(webInfDir, "classes").toPath());
+ classesConfig.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ scanner.watch(classesConfig);
+
+ PathWatcher.Config libConfig = new PathWatcher.Config(new File(webInfDir, "lib").toPath());
+ libConfig.setRecurseDepth(PathWatcher.Config.UNLIMITED_DEPTH);
+ scanner.watch(libConfig);
+
+ scanner.addListener(new PathWatcher.EventListListener()
{
- public void filesChanged(List changes)
+
+ @Override
+ public void onPathWatchEvents(List<PathWatchEvent> events)
{
try
{
- boolean reconfigure = changes.contains(project.getFile().getCanonicalPath());
+ boolean reconfigure = false;
+ for (PathWatchEvent e:events)
+ {
+ if (e.getPath().equals(project.getFile().toPath()))
+ {
+ reconfigure = true;
+ break;
+ }
+ }
restartWebApp(reconfigure);
}
catch (Exception e)
@@ -137,6 +151,7 @@ public class JettyRunWarExplodedMojo extends AbstractJettyMojo
{
getLog().info("Restarting webapp");
getLog().debug("Stopping webapp ...");
+ stopScanner();
webApp.stop();
getLog().debug("Reconfiguring webapp ...");
@@ -147,23 +162,13 @@ public class JettyRunWarExplodedMojo extends AbstractJettyMojo
if (reconfigureScanner)
{
getLog().info("Reconfiguring scanner after change to pom.xml ...");
- scanList.clear();
- scanList.add(project.getFile());
- File webInfDir = new File(war,"WEB-INF");
- scanList.add(new File(webInfDir, "web.xml"));
- File jettyWebXmlFile = findJettyWebXmlFile(webInfDir);
- if (jettyWebXmlFile != null)
- scanList.add(jettyWebXmlFile);
- File jettyEnvXmlFile = new File(webInfDir, "jetty-env.xml");
- if (jettyEnvXmlFile.exists())
- scanList.add(jettyEnvXmlFile);
- scanList.add(new File(webInfDir, "classes"));
- scanList.add(new File(webInfDir, "lib"));
- scanner.setScanDirs(scanList);
+ scanner.reset();
+ configureScanner();
}
getLog().debug("Restarting webapp ...");
webApp.start();
+ startScanner();
getLog().info("Restart completed.");
}
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 b2b699b84c..e55bee9c8f 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
@@ -19,12 +19,12 @@
package org.eclipse.jetty.maven.plugin;
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.eclipse.jetty.util.Scanner;
+import org.eclipse.jetty.util.PathWatcher;
+import org.eclipse.jetty.util.PathWatcher.PathWatchEvent;
/**
* <p>
@@ -100,18 +100,26 @@ public class JettyRunWarMojo extends AbstractJettyMojo
*/
public void configureScanner() throws MojoExecutionException
{
- scanList = new ArrayList();
- scanList.add(project.getFile());
- scanList.add(war);
-
- scannerListeners = new ArrayList();
- scannerListeners.add(new Scanner.BulkListener()
+ scanner.watch(project.getFile().toPath());
+ scanner.watch(war.toPath());
+
+ scanner.addListener(new PathWatcher.EventListListener()
{
- public void filesChanged(List changes)
+
+ @Override
+ public void onPathWatchEvents(List<PathWatchEvent> events)
{
try
{
- boolean reconfigure = changes.contains(project.getFile().getCanonicalPath());
+ boolean reconfigure = false;
+ for (PathWatchEvent e:events)
+ {
+ if (e.getPath().equals(project.getFile().toPath()))
+ {
+ reconfigure = true;
+ break;
+ }
+ }
restartWebApp(reconfigure);
}
catch (Exception e)
@@ -132,6 +140,7 @@ public class JettyRunWarMojo extends AbstractJettyMojo
{
getLog().info("Restarting webapp ...");
getLog().debug("Stopping webapp ...");
+ stopScanner();
webApp.stop();
getLog().debug("Reconfiguring webapp ...");
@@ -142,14 +151,13 @@ public class JettyRunWarMojo extends AbstractJettyMojo
if (reconfigureScanner)
{
getLog().info("Reconfiguring scanner after change to pom.xml ...");
- scanList.clear();
- scanList.add(project.getFile());
- scanList.add(war);
- scanner.setScanDirs(scanList);
+ scanner.reset();
+ configureScanner();
}
getLog().debug("Restarting webapp ...");
webApp.start();
+ startScanner();
getLog().info("Restart completed.");
}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanPattern.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanPattern.java
new file mode 100644
index 0000000000..586cd1c861
--- /dev/null
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanPattern.java
@@ -0,0 +1,53 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2015 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 org.eclipse.jetty.maven.plugin;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ScanPattern
+ *
+ * A pattern of includes and excludes.
+ */
+public class ScanPattern
+{
+ private List<String> _includes = Collections.emptyList();
+ private List<String> _excludes = Collections.emptyList();
+
+ public void setIncludes (List<String> includes)
+ {
+ _includes= includes;
+ }
+
+ public void setExcludes(List<String> excludes)
+ {
+ _excludes = excludes;
+ }
+
+ public List<String> getIncludes()
+ {
+ return _includes;
+ }
+
+ public List<String> getExcludes()
+ {
+ return _excludes;
+ }
+}
diff --git a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanTargetPattern.java b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanTargetPattern.java
index d6c4d51a78..d019fd3fca 100644
--- a/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanTargetPattern.java
+++ b/jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/ScanTargetPattern.java
@@ -46,8 +46,7 @@ import java.util.List;
public class ScanTargetPattern
{
private File _directory;
- private List _includes = Collections.EMPTY_LIST;
- private List _excludes = Collections.EMPTY_LIST;
+ private ScanPattern _pattern;
/**
* @return the _directory
@@ -65,24 +64,28 @@ public class ScanTargetPattern
this._directory = directory;
}
- public void setIncludes (List includes)
+ public void setIncludes (List<String> includes)
{
- _includes= includes;
+ if (_pattern == null)
+ _pattern = new ScanPattern();
+ _pattern.setIncludes(includes);
}
- public void setExcludes(List excludes)
+ public void setExcludes(List<String> excludes)
{
- _excludes = excludes;
+ if (_pattern == null)
+ _pattern = new ScanPattern();
+ _pattern.setExcludes(excludes);
}
- public List getIncludes()
+ public List<String> getIncludes()
{
- return _includes;
+ return (_pattern == null? Collections.emptyList() : _pattern.getIncludes());
}
- public List getExcludes()
+ public List<String> getExcludes()
{
- return _excludes;
+ return (_pattern == null? Collections.emptyList() : _pattern.getExcludes());
}
}

Back to the top