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