如何使用 java 代码与系统命令行交互
how to interact with system cmd line using java code
我正在尝试创建一个 Java 代码来创建一个 nifi 定制处理器!所以为了做到这一点,我需要使用 windows cmd windows 并启动 mvn archetype:generate
然后通过输入 nifi
选择 modele nifi然后通过键入 1
选择项目,我需要写 groupeId,工件 ...
我需要使用 java 代码自动完成所有这些工作:我试过这段代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CmdTest {
public static void main(String[]args) throws IOException {
String line;
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;
// launch EXE and grab stdin/stdout and stderr
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\users\eya\desktop\javaprocessor\" && mvn archetype:generate");
builder.redirectErrorStream(true);
Process process = builder.start();
stdin = process.getOutputStream ();
stderr = process.getErrorStream ();
stdout = process.getInputStream ();
// "write" the parms into stdin
line = "nifi" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "1" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "33" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "javaproceSSor" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "javaprocessor" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "javapro" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "y" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
stdin.close();
// clean up if any output in stdout
BufferedReader brCleanUp =
new BufferedReader (new InputStreamReader (stdout));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stdout] " + line);
}
brCleanUp.close();
// clean up if any output in stderr
brCleanUp =
new BufferedReader (new InputStreamReader (stderr));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stderr] " + line);
}
brCleanUp.close();
}
}
但它只读 "nifi" 其他的没有!这是结果:
[Stdout] 2679: remote -> us.fatehi:schemacrawler-archetype-plugin-command (-)
[Stdout] 2680: remote -> us.fatehi:schemacrawler-archetype-plugin-dbconnector (-)
[Stdout] 2681: remote -> us.fatehi:schemacrawler-archetype-plugin-lint (-)
[Stdout] 2682: remote -> ws.osiris:osiris-archetype (Maven Archetype for Osiris)
[Stdout] 2683: remote -> xyz.luan.generator:xyz-gae-generator (-)
[Stdout] 2684: remote -> xyz.luan.generator:xyz-generator (-)
[Stdout] 2685: remote -> za.co.absa.hyperdrive:component-archetype (-)
[Stdout] Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1589: Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
[Stdout] 1: 1.0-alpha-1
[Stdout] 2: 1.0-alpha-2
[Stdout] 3: 1.0-alpha-3
[Stdout] 4: 1.0-alpha-4
[Stdout] 5: 1.0
[Stdout] 6: 1.1
[Stdout] 7: 1.3
[Stdout] 8: 1.4
[Stdout] Choose a number: 8: Define value for property 'groupId': [INFO] ------------------------------------------------------------------------
[Stdout] [INFO] BUILD FAILURE
[Stdout] [INFO] ------------------------------------------------------------------------
[Stdout] [INFO] Total time: 12.592 s
[Stdout] [INFO] Finished at: 2020-04-12T21:13:20+01:00
[Stdout] [INFO] ------------------------------------------------------------------------
[Stdout] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate (default-cli) on project standalone-pom: null: MojoFailureException: NullPointerException -> [Help 1]
[Stdout] [ERROR]
[Stdout] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[Stdout] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
[Stdout] [ERROR]
[Stdout] [ERROR] For more information about the errors and possible solutions, please read the following articles:
[Stdout] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
如果有什么方法可以自动生成mvn项目,欢迎大家帮忙
EDIT:
I tried this solution but I didn't know how to configure it
只是不要那样做。 mvn 命令可以在命令行中接受所有必需的参数,因此不需要交互操作。请参阅有关插件的文档,并相应地将参数提供给单个命令。参见 http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html
这里有一个例子:Specify archetype for archetype:generate on command line
我正在尝试创建一个 Java 代码来创建一个 nifi 定制处理器!所以为了做到这一点,我需要使用 windows cmd windows 并启动 mvn archetype:generate
然后通过输入 nifi
选择 modele nifi然后通过键入 1
选择项目,我需要写 groupeId,工件 ...
我需要使用 java 代码自动完成所有这些工作:我试过这段代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CmdTest {
public static void main(String[]args) throws IOException {
String line;
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;
// launch EXE and grab stdin/stdout and stderr
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\users\eya\desktop\javaprocessor\" && mvn archetype:generate");
builder.redirectErrorStream(true);
Process process = builder.start();
stdin = process.getOutputStream ();
stderr = process.getErrorStream ();
stdout = process.getInputStream ();
// "write" the parms into stdin
line = "nifi" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "1" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "33" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "javaproceSSor" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "javaprocessor" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "javapro" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "y" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
stdin.close();
// clean up if any output in stdout
BufferedReader brCleanUp =
new BufferedReader (new InputStreamReader (stdout));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stdout] " + line);
}
brCleanUp.close();
// clean up if any output in stderr
brCleanUp =
new BufferedReader (new InputStreamReader (stderr));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stderr] " + line);
}
brCleanUp.close();
}
}
但它只读 "nifi" 其他的没有!这是结果:
[Stdout] 2679: remote -> us.fatehi:schemacrawler-archetype-plugin-command (-)
[Stdout] 2680: remote -> us.fatehi:schemacrawler-archetype-plugin-dbconnector (-)
[Stdout] 2681: remote -> us.fatehi:schemacrawler-archetype-plugin-lint (-)
[Stdout] 2682: remote -> ws.osiris:osiris-archetype (Maven Archetype for Osiris)
[Stdout] 2683: remote -> xyz.luan.generator:xyz-gae-generator (-)
[Stdout] 2684: remote -> xyz.luan.generator:xyz-generator (-)
[Stdout] 2685: remote -> za.co.absa.hyperdrive:component-archetype (-)
[Stdout] Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1589: Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
[Stdout] 1: 1.0-alpha-1
[Stdout] 2: 1.0-alpha-2
[Stdout] 3: 1.0-alpha-3
[Stdout] 4: 1.0-alpha-4
[Stdout] 5: 1.0
[Stdout] 6: 1.1
[Stdout] 7: 1.3
[Stdout] 8: 1.4
[Stdout] Choose a number: 8: Define value for property 'groupId': [INFO] ------------------------------------------------------------------------
[Stdout] [INFO] BUILD FAILURE
[Stdout] [INFO] ------------------------------------------------------------------------
[Stdout] [INFO] Total time: 12.592 s
[Stdout] [INFO] Finished at: 2020-04-12T21:13:20+01:00
[Stdout] [INFO] ------------------------------------------------------------------------
[Stdout] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate (default-cli) on project standalone-pom: null: MojoFailureException: NullPointerException -> [Help 1]
[Stdout] [ERROR]
[Stdout] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[Stdout] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
[Stdout] [ERROR]
[Stdout] [ERROR] For more information about the errors and possible solutions, please read the following articles:
[Stdout] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
如果有什么方法可以自动生成mvn项目,欢迎大家帮忙
EDIT: I tried this solution but I didn't know how to configure it
只是不要那样做。 mvn 命令可以在命令行中接受所有必需的参数,因此不需要交互操作。请参阅有关插件的文档,并相应地将参数提供给单个命令。参见 http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html 这里有一个例子:Specify archetype for archetype:generate on command line