Index: SSHLauncher.java =================================================================== --- SSHLauncher.java (revision 30273) +++ SSHLauncher.java (working copy) @@ -3,17 +3,27 @@ import static hudson.Util.fixEmpty; import static java.util.logging.Level.FINE; import hudson.AbortException; +import hudson.EnvVars; import hudson.Extension; import hudson.Util; import hudson.model.Descriptor; import hudson.model.Hudson; +import hudson.model.JDK; +import hudson.model.JDK.*; +import hudson.model.Node; import hudson.model.TaskListener; import hudson.remoting.Channel; import hudson.slaves.ComputerLauncher; +import hudson.slaves.EnvironmentVariablesNodeProperty; +import hudson.slaves.NodeProperty; +import hudson.slaves.NodePropertyDescriptor; import hudson.slaves.SlaveComputer; import hudson.tools.JDKInstaller; +import hudson.tools.ToolLocationNodeProperty; import hudson.tools.JDKInstaller.CPU; import hudson.tools.JDKInstaller.Platform; +import hudson.tools.ToolLocationNodeProperty.ToolLocation; +import hudson.util.DescribableList; import hudson.util.IOException2; import hudson.util.Secret; import hudson.util.StreamCopyThread; @@ -608,13 +618,34 @@ @Extension public static class DefaultJavaProvider extends JavaProvider { public List getJavas(SlaveComputer computer, TaskListener listener, Connection connection) { - return Arrays.asList("java", + List javas = new ArrayList(Arrays.asList("java", "/usr/bin/java", "/usr/java/default/bin/java", "/usr/java/latest/bin/java", "/usr/local/bin/java", "/usr/local/java/bin/java", - getWorkingDirectory(computer)+"/jdk/bin/java"); // this is where we attempt to auto-install + getWorkingDirectory(computer)+"/jdk/bin/java")); // this is where we attempt to auto-install + + DescribableList, NodePropertyDescriptor> nodePropertyList = computer.getNode().getNodeProperties(); + if (nodePropertyList != null ) { + for (NodeProperty nodeProperty : nodePropertyList) { + if (nodeProperty instanceof EnvironmentVariablesNodeProperty) { + EnvVars ev = ((EnvironmentVariablesNodeProperty)nodeProperty).getEnvVars(); + if (ev != null && ev.containsKey("JAVA_HOME")) { + javas.add(ev.get("JAVA_HOME") + "/bin/java"); + } + } + // see if they specified a jdk tool location + if (nodeProperty instanceof ToolLocationNodeProperty) { + for (ToolLocation tool : ((ToolLocationNodeProperty)nodeProperty).getLocations()) { + if (tool.getType().getDisplayName().equals(new JDK.DescriptorImpl().getDisplayName())) { + javas.add(tool.getHome() + "/bin/java"); + } + } + } + } + } + return javas; } }