Эквивалент REXEC в Gradle
Я работаю над сборкой, которую я конвертирую из Ant в Gradle. В нем он должен взаимодействовать с системой IBM iSeries, чтобы упаковать файл и затем загрузить его обратно на компьютер, который выполняет сборку (Windows). Часть FTP в порядке, но я сталкиваюсь с проблемами в битах rexec.
В Ant у нас есть возможность использовать задачу rexec, и это прекрасно работает. Однако я не вижу альтернативы на стороне Gradle. Это то, что я собираюсь попробовать и написать сценарий с Groovy? Или есть какая-то альтернатива, которую мне не хватает?
2 ответа
Дальнейшие исследования показали, что rexec
это не SSH. Это отдельный удаленный протокол, который в основном используется для взаимодействия с iSeries.
Оказывается, мне нужно было написать небольшую программу, которая имитирует функциональность REXEC. Он использует инструменты IBM JT:
package com.myco.mypackage;
import java.beans.PropertyVetoException;
import java.io.IOException;
import com.ibm.as400.access.*;
public class RemoteCommandExecutor {
private String system;
private String user;
private String password;
private String command;
public RemoteCommandExecutor(String system, String user, String password, String command) {
this.system = system;
this.user = user;
this.password = password;
this.command = command;
}
public void doCmd (){
AS400 theSys = new AS400(this.getSystem(), this.getUser(), this.getPassword());
CommandCall cmd = new CommandCall(theSys);
try {
cmd.run(this.getCommand());
AS400Message[] messageList = cmd.getMessageList();
for (int i = 0; i < messageList.length; i++) {
System.out.println(messageList[i].getText());
}
} catch (AS400SecurityException
| ErrorCompletingRequestException
| IOException
| InterruptedException
| PropertyVetoException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
RemoteCommandExecutor exec = new RemoteCommandExecutor(args[0],args[1],args[2], args[3]);
exec.doCmd();
}
/**
* @return the system
*/
public String getSystem() {
return system;
}
/**
* @param system the system to set
*/
public void setSystem(String system) {
this.system = system;
}
/**
* @return the user
*/
public String getUser() {
return user;
}
/**
* @param user the user to set
*/
public void setUser(String user) {
this.user = user;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the command
*/
public String getCommand() {
return command;
}
/**
* @param command the command to set
*/
public void setCommand(String command) {
this.command = command;
}
}
Затем из build.gradle создайте exec-закрытие... предполагается, что файл jar находится в проекте:
exec{
commandLine "java", "-jar", "RemoteCommandExecutor.jar", project.ext.props.get("system"), project.ext.props.get("user"),project.ext.props.get("password"), project.ext.props.get("command.to.run")
}
Если Gradle не предлагает какую-либо функциональность, для этого обычно есть плагин. Взгляните на этот плагин Gradle SSH. Он предлагает как пароль, так и сертификат аутентификации.