how to interact with system cmd line using java code

Viewed 153

I'm trying to create a Java code that creates a nifi customized processor ! so in order to do that I need to use windows cmd windows and launch mvn archetype:generate then choose the modele nifi by typing nifi then choose the project by typing1 the I need to write the groupeId, the artifact ...

enter image description here enter image description here enter image description here

I need to do all that automatically by using a java code : I tryed this code :

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();
    }
}

but it only read "nifi" the others no ! and here is the result :

    [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

if there is any way to generate mvn projects automatically then you are very welcome to help

EDIT: I tried this solution but I didn't know how to configure it

1 Answers
Related