|
41 | 41 | import hudson.Functions; |
42 | 42 | import hudson.Launcher; |
43 | 43 | import hudson.Launcher.ProcStarter; |
44 | | -import hudson.Platform; |
45 | 44 | import hudson.Proc; |
46 | 45 | import hudson.Util; |
47 | 46 | import hudson.console.ConsoleLogFilter; |
|
53 | 52 | import hudson.model.Node; |
54 | 53 | import hudson.model.Run; |
55 | 54 | import hudson.model.TaskListener; |
56 | | -import hudson.remoting.VirtualChannel; |
57 | 55 | import hudson.slaves.WorkspaceList; |
58 | 56 | import hudson.tasks.Maven; |
59 | 57 | import hudson.tasks.Maven.MavenInstallation; |
60 | | -import java.io.BufferedReader; |
61 | 58 | import java.io.ByteArrayOutputStream; |
62 | | -import java.io.File; |
63 | 59 | import java.io.IOException; |
64 | 60 | import java.io.InputStream; |
65 | | -import java.io.InputStreamReader; |
66 | 61 | import java.net.URL; |
67 | 62 | import java.security.CodeSource; |
68 | 63 | import java.util.ArrayList; |
|
76 | 71 | import java.util.Optional; |
77 | 72 | import java.util.UUID; |
78 | 73 | import java.util.function.Function; |
79 | | -import java.util.function.Predicate; |
80 | 74 | import java.util.logging.Level; |
81 | 75 | import java.util.logging.Logger; |
82 | 76 | import java.util.stream.Collectors; |
83 | | -import jenkins.MasterToSlaveFileCallable; |
84 | 77 | import jenkins.model.Jenkins; |
85 | 78 | import jenkins.mvn.DefaultGlobalSettingsProvider; |
86 | 79 | import jenkins.mvn.DefaultSettingsProvider; |
@@ -667,37 +660,25 @@ private String obtainMvnExecutableFromMavenInstallation(String mavenInstallation |
667 | 660 |
|
668 | 661 | private MavenVersion readMavenVersion(String mvnExecPath) { |
669 | 662 | try { |
670 | | - String result = new FilePath(ws.getChannel(), mvnExecPath).act(new MasterToSlaveFileCallable<String>() { |
671 | | - |
672 | | - private static final long serialVersionUID = -1064011914865943982L; |
673 | | - |
674 | | - @Override |
675 | | - public String invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { |
676 | | - ProcessBuilder builder = new ProcessBuilder(); |
677 | | - if (Platform.current() == Platform.WINDOWS) { |
678 | | - builder.command("cmd.exe", "/c", "\"" + f.getAbsolutePath() + "\" --version"); |
679 | | - } else { |
680 | | - builder.command("sh", "-c", "\"" + f.getAbsolutePath() + "\" --version"); |
681 | | - } |
682 | | - Process process = builder.start(); |
683 | | - try (InputStreamReader is = new InputStreamReader(process.getInputStream(), "UTF-8"); |
684 | | - BufferedReader reader = new BufferedReader(is)) { |
685 | | - Optional<String> versionLine = reader.lines() |
686 | | - .filter(MavenVersionUtils.containsMavenVersion()) |
687 | | - .findFirst(); |
688 | | - int exitCode = process.waitFor(); |
689 | | - if (exitCode != 0) { |
690 | | - console.trace("[withMaven] failed to read Maven version (" + exitCode + "): " |
691 | | - + new String(process.getErrorStream().readAllBytes(), "UTF-8")); |
692 | | - return null; |
693 | | - } |
694 | | - return versionLine.orElse(""); |
695 | | - } |
| 663 | + try (ByteArrayOutputStream stdout = new ByteArrayOutputStream(); |
| 664 | + ByteArrayOutputStream stderr = new ByteArrayOutputStream()) { |
| 665 | + ProcStarter ps = launcher.launch(); |
| 666 | + Proc p = launcher.launch( |
| 667 | + ps.cmds(mvnExecPath, "--version").stdout(stdout).stderr(stderr)); |
| 668 | + int exitCode = p.join(); |
| 669 | + if (exitCode == 0) { |
| 670 | + Optional<String> version = stdout.toString(getComputer().getDefaultCharset()) |
| 671 | + .lines() |
| 672 | + .filter(MavenVersionUtils.containsMavenVersion()) |
| 673 | + .findFirst(); |
| 674 | + console.trace("[withMaven] found Maven version: " + version.orElse("none")); |
| 675 | + return version.map(MavenVersionUtils::parseMavenVersion).orElse(MavenVersion.UNKNOWN); |
| 676 | + } else { |
| 677 | + console.trace("[withMaven] failed to read Maven version (" + exitCode + "): " |
| 678 | + + stderr.toString(getComputer().getDefaultCharset())); |
| 679 | + return MavenVersion.UNKNOWN; |
696 | 680 | } |
697 | | - }); |
698 | | - Optional<String> version = Optional.ofNullable(result).filter(Predicate.not(String::isBlank)); |
699 | | - console.trace("[withMaven] found Maven version: " + version.orElse("none")); |
700 | | - return version.map(MavenVersionUtils::parseMavenVersion).orElse(MavenVersion.UNKNOWN); |
| 681 | + } |
701 | 682 | } catch (Exception ex) { |
702 | 683 | console.trace("[withMaven] failed to read Maven version: " + ex.getMessage()); |
703 | 684 | return MavenVersion.UNKNOWN; |
|
0 commit comments