All Downloads are FREE. Search and download functionalities are using the official Maven repository.

li.rudin.mavenjs.plugin.ServerMojo Maven / Gradle / Ivy

package li.rudin.mavenjs.plugin;

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.project.MavenProject;

import ch.ri.js.server.HTTPServer;

@Mojo(requiresDependencyResolution=ResolutionScope.TEST, name="server")
public class ServerMojo extends AbstractMojo
{
	@Parameter(defaultValue="8080") int port;
	@Parameter(defaultValue="${project}") MavenProject project;

	/*
	 * http://blog.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/#.UndePOIX70M
	@Component RepositorySystem repoSystem;
	@Parameter(defaultValue="${repositorySystemSession}") RepositorySystemSession repoSession;
	@Parameter(defaultValue="${project.remotePluginRepositories}") List remoteRepos; 
	*/

	@Override
	public void execute() throws MojoExecutionException, MojoFailureException
	{
		final Log logger = getLog();

		try
		{
			List urls = new ArrayList();
						
			//src/main/resources
			for (Resource res: project.getBuild().getResources())
				urls.add( new File(res.getDirectory()).toURI().toURL() );
			
			//src/test/resources
			for (Resource res: project.getBuild().getTestResources())
				urls.add( new File(res.getDirectory()).toURI().toURL() );

			//src/main/java
			//urls.add(new File( project.getBuild().getTestSourceDirectory() ).toURI().toURL() );
			//src/test/java
			//urls.add(new File( project.getBuild().getSourceDirectory() ).toURI().toURL() );

			for (Artifact artifact: (Set)project.getArtifacts())
				urls.add( artifact.getFile().toURI().toURL() );

			for (URL url: urls)
				logger.info("Classpath entry: " + url);

			URLClassLoader classLoader = new URLClassLoader( urls.toArray(new URL[urls.size()]) );

			Thread thread = new Thread( new Runnable()
			{
				@Override
				public void run()
				{
					try
					{
						HTTPServer server = new HTTPServer(port);
						server.start();

						System.out.println("Server listening on port: " + port);
						System.out.println("Press enter to stop...");

						System.in.read();

						server.stop();
					}
					catch (Exception e)
					{
						logger.error(e);
					}
				}
			});

			thread.setContextClassLoader(classLoader);
			thread.start();
			thread.join();

		}
		catch (Exception e)
		{
			logger.error(e);
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy