/// <summary> /// Starts a server node with a given version. /// </summary> /// <param name="groupId">Maven artifact group id.</param> /// <param name="version">Product version.</param> /// <returns>Disposable object to stop the server.</returns> public static IDisposable Start(string groupId, string version) { IgniteArgumentCheck.NotNullOrEmpty(version, "version"); var pomWrapper = ReplaceIgniteVersionInPomFile(groupId, version, Path.Combine(JavaServerSourcePath, "pom.xml")); EnsureJvmCreated(); var time = DateTime.Now; TestUtilsJni.StartProcess( file: Os.IsWindows ? "cmd.exe" : "/bin/bash", arg1: Os.IsWindows ? "/c" : "-c", arg2: string.Format("{0} {1}", MavenPath, MavenCommandExec), envVars: Jvm.IsJava9() ? "MAVEN_OPTS#" + string.Join(" ", Jvm.Java9Options) : string.Empty, workDir: JavaServerSourcePath, waitForOutput: "Ignite node started OK"); // Java can not end process tree on Windows - detect the process manually and use taskkill. var serverProc = Os.IsWindows ? System.Diagnostics.Process .GetProcesses() .Single(p => p.ProcessName == "java" && p.StartTime > time) : null; return(new DisposeAction(() => { if (serverProc != null) { serverProc.KillProcessTree(); } TestUtilsJni.DestroyProcess(); pomWrapper.Dispose(); })); }