com.theoryinpractise.clojure.ClojureSwankMojo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of clojure-maven-plugin Show documentation
Show all versions of clojure-maven-plugin Show documentation
Maven plugin for compiling clojure source files
/*
* Copyright (c) Mark Derricutt 2010.
*
* The use and distribution terms for this software are covered by the Eclipse Public License 1.0
* (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10.html
* at the root of this distribution.
*
* By using this software in any fashion, you are agreeing to be bound by the terms of this license.
*
* You must not remove this notice, or any other, from this software.
*/
package com.theoryinpractise.clojure;
import org.apache.commons.lang.SystemUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@Mojo(name = "swank", requiresDependencyResolution = ResolutionScope.TEST)
public class ClojureSwankMojo extends AbstractClojureCompilerMojo {
/**
* The clojure script to preceding the switch to the repl
*/
@Parameter private String replScript;
@Parameter(defaultValue = "4005", property = "clojure.swank.port")
protected int port;
@Parameter(defaultValue = "2009-09-14", property = "clojure.swank.protocolVersion")
protected String protocolVersion;
@Parameter(defaultValue = "iso-8859-1", property = "clojure.swank.encoding")
protected String encoding;
@Parameter(defaultValue = "localhost", property = "clojure.swank.host")
protected String swankHost;
@Override
public void execute() throws MojoExecutionException {
StringBuilder sb = new StringBuilder();
sb.append("(do ");
sb.append("(swank.swank/start-server");
sb.append(" :host \"").append(swankHost).append("\"");
sb.append(" :port ");
sb.append(Integer.toString(port));
sb.append(" :encoding \"").append(encoding).append("\"");
sb.append(" :dont-close true");
sb.append("))");
String swankLoader = sb.toString();
if (SystemUtils.IS_OS_WINDOWS) {
swankLoader = windowsEscapeCommandLineArg(swankLoader);
}
List args = new ArrayList();
if (replScript != null && new File(replScript).exists()) {
args.add("-i");
args.add(replScript);
}
args.add("-e");
args.add("(require (quote swank.swank))");
args.add("-e");
args.add(swankLoader);
callClojureWith(
getSourceDirectories(SourceDirectory.TEST, SourceDirectory.COMPILE),
outputDirectory,
getRunWithClasspathElements(),
"clojure.main",
args.toArray(new String[args.size()]));
}
private String windowsEscapeCommandLineArg(String arg) {
return "\"" + arg.replace("\"", "\\\"") + "\"";
}
}