如何使用 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