2016-03-08 4 views
2

Я хочу выполнить команды градации на удаленной машине с Mac OS. Я написал программу Java и использую библиотеку JSch. Я в состоянии выполнять другие команды, как PWD, LS, и т.д. Но когда я выполнить любую команду Gradle он говоритgradle: команда не найдена во время выполнения на удаленной машине

Connected 
bash: gradle: command not found 
exit-status: 127 
DONE 
BUILD SUCCESSFUL (total time: 8 seconds) 

Я уже установлен путь GRADLE_HOME в профиль, и я в состоянии выполнить команду из терминала, но а не от удаленной программы.

Ниже моя программа Java

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package commandexecuter; 

import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.ChannelExec; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.Session; 
import java.io.InputStream; 
import java.util.Properties; 

/** 
* 
* @author dgulhane 
*/ 
public class CommandExecuter { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     String host = "abc.xyz.com"; 
     String username = "Admin"; 
     String password = "123456"; 
     String command = "gradle -v"; 


     try { 
      java.util.Properties config = new Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      JSch jSch = new JSch(); 

      Session session = jSch.getSession(username, host, 22); 
      session.setPassword(password); 
      session.setConfig(config); 
      session.connect(); 
      System.out.println("Connected"); 

      Channel channel=session.openChannel("exec"); 
      ((ChannelExec)channel).setCommand(command); 
      channel.setInputStream(null); 
      ((ChannelExec)channel).setErrStream(System.err); 

      InputStream in=channel.getInputStream(); 
      channel.connect(); 
      byte[] tmp=new byte[1024]; 
      while(true){ 
       while(in.available()>0){ 
       int i=in.read(tmp, 0, 1024); 
       if(i<0)break; 
       System.out.print(new String(tmp, 0, i)); 
       } 
       if(channel.isClosed()){ 
       System.out.println("exit-status: "+channel.getExitStatus()); 
       break; 
       } 
       try{Thread.sleep(1000);}catch(Exception ee){} 
      } 
      channel.disconnect(); 
      session.disconnect(); 
      System.out.println("DONE"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Я хочу знать, как я могу выполнить Gradle команды удаленно

+1

gradle - внешняя программа, и, вероятно, она не установлена ​​на удаленном компьютере. – pleft

+0

@elefasGR прав, но стандартная практика в мире градиента заключается в том, чтобы включить оболочку градиента с источником. Пока удаленный компьютер имеет доступ в Интернет, сценарий оболочки загружает двоичные файлы градиента и выполняет сборку. Использование обертки также гарантирует, что время разработки градиента всегда будет использоваться для сборки. – RaGe

ответ

0

Если gradle не установлен на удаленном компьютере, то вам необходимо использовать Gradle Wrapper. Обертка градиента - это сценарий, описанный вами, который будет загружать и настраивать град. Однако команда gradle, использующая ваш String command = "gradle -v";, относится к двоичному файлу gradle, а не к оболочке.

Для вызова сценария обертку вы, вероятно, хотите использовать

String command = "./gradlew -v"; 

Убедитесь, что ваша команда окр устанавливается на основании вашего проекта, в котором сценарий gradlew существует.

+1

Команда должна включать слэш: './gradlew -v' (если только' gradlew' находится в 'PATH'). – Roman

+0

@Roman хороший пункт. Обновленный ответ – JBirdVegas

+0

@JBirdVegas Я уже установил «gradle» на удаленном компьютере и включил «gradle» в «PATH». Я попробую использовать «обертка градиента». –