package scala_maven; import org.apache.maven.toolchain.Toolchain; import org.codehaus.plexus.util.StringUtils; import scala_maven_executions.JavaMainCaller; import scala_maven_executions.JavaMainCallerByFork; import scala_maven_executions.MainHelper; /** * Run a Scala class using the Scala runtime * * @goal run * @requiresDependencyResolution test * @execute phase="test-compile" * @threadSafe */ public class ScalaRunMojo extends ScalaMojoSupport { /** * The class to use when launching a scala program * * @parameter property="launcher" */ protected String launcher; /** * Additional parameter to use to call the main class * Using this parameter only from command line ("-DaddArgs=arg1|arg2|arg3|..."), not from pom.xml. * @parameter property="addArgs" */ protected String addArgs; /** * A list of launcher definition (to avoid rewriting long command line or share way to call an application) * launchers could be define by : * <pre> * <launchers> * <launcher> * <id>myLauncher</id> * <mainClass>my.project.Main</mainClass> * <args> * <arg>arg1</arg> * </args> * <jvmArgs> * <jvmArg>-Xmx64m</jvmArg> * </jvmArgs> * </launcher> * <launcher> * <id>myLauncher2</id> * ... * <><> * </launcher> * </launchers> * </pre> * @parameter */ protected Launcher[] launchers; /** * Main class to call, the call use the jvmArgs and args define in the pom.xml, and the addArgs define in the command line if define. * * Higher priority to launcher parameter) * Using this parameter only from command line (-DmainClass=...), not from pom.xml. * @parameter property="mainClass" */ protected String mainClass; @Override protected void doExecute() throws Exception { JavaMainCaller jcmd = null; Toolchain toolchain = toolchainManager.getToolchainFromBuildContext("jdk", session); if (StringUtils.isNotEmpty(mainClass)) { jcmd = new JavaMainCallerByFork(this, mainClass, MainHelper.toMultiPath(project.getTestClasspathElements()), jvmArgs, args, forceUseArgFile, toolchain); } else if ((launchers != null) && (launchers.length > 0)) { if (StringUtils.isNotEmpty(launcher)) { for(int i = 0; (i < launchers.length) && (jcmd == null); i++) { if (launcher.equals(launchers[i].id)) { getLog().info("launcher '"+ launchers[i].id + "' selected => "+ launchers[i].mainClass ); jcmd = new JavaMainCallerByFork(this, launchers[i].mainClass, MainHelper.toMultiPath(project.getTestClasspathElements()), launchers[i].jvmArgs, launchers[i].args, forceUseArgFile, toolchain); } } } else { getLog().info("launcher '"+ launchers[0].id + "' selected => "+ launchers[0].mainClass ); jcmd = new JavaMainCallerByFork(this, launchers[0].mainClass, MainHelper.toMultiPath(project.getTestClasspathElements()), launchers[0].jvmArgs, launchers[0].args, forceUseArgFile, toolchain); } } if (jcmd != null) { if (StringUtils.isNotEmpty(addArgs)) { jcmd.addArgs(StringUtils.split(addArgs, "|")); } jcmd.run(displayCmd); } else { getLog().warn("Not mainClass or valid launcher found/define"); } } }