Javaから次のCURLコマンドを実行したい:
curl -v -X PUT --data-binary "@ configfile.json" -u username:password -D / tmp / grabbit_headers http:// server:port / grabbit / job
(http://とserver ...の間のスペースは、スタックオーバーフローのガイドラインに従って挿入されますが、私のコードの一部ではありません)
私はフォローしました
http://alvinalexander.com/java/java-exec-processbuilder-process-1、process2およびprocess3
ProcessBuilderAPIを使用してシェルコマンドを実行するJavaクラスを作成します。
シェルでCURLコマンドを直接実行すると、CURLコマンドが機能し、期待どおりの結果が得られます。Javaクラスを介してまったく同じコマンドを使用すると、exitCode = 0でエラーなしで実行されますが、意図した結果が得られません。
ここでの意図する結果は、Grabbit(https://github.com/TWCable/grabbit)を使用して、あるAdobeAEMインスタンスから別のインスタンスにコンテンツを移行することです。
これが私の主な方法です:
public String processBuilderExample() throws IOException, InterruptedException
{
// build the system command we want to run
List<String> commands;
String result="";
/*
* CURL Commands:
* curl -v -X PUT --data-binary "@$configpath" -u $username:$password -D /tmp/grabbit_headers $client$GRABBIT_JOB > /tmp/grabbit
* */
String curl_command="curl -v -X PUT --data-binary \"@"+this.configpath+"\""+" -u "+this.username+":"+this.password+" -D /tmp/grabbit_headers "+this.client+this.GRABBIT_JOB;
commands = new ArrayList<String>(Arrays.asList(curl_command.split(" ")));
result=runCommand(commands);
return result;
}
//@Override
public String runCommand(List<String> commands) throws IOException, InterruptedException
{
// execute the command
SystemCommandExecutor commandExecutor = new SystemCommandExecutor(commands);
int result = commandExecutor.executeCommand();
// get the stdout and stderr from the command that was run
StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();
StringBuilder finalReturnString=new StringBuilder();
finalReturnString.append("<br/>STDOUT:<br/>");
finalReturnString.append(stdout.toString());
finalReturnString.append("<br/>STDERR:<br/>");
finalReturnString.append(stderr.toString());
return finalReturnString.toString();
}
ProcessBuilderを使用してリダイレクトを構成します。
">"リダイレクトはシェル(sh / bash)の一部であり、コマンドではありません。
プロセスビルダーを使用してリダイレクトする方法については、ランタイムのexec()メソッドが出力をリダイレクトしていないことを参照してください。
正しく機能しない理由については、&>リダイレクトが正しく機能しないを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加