intellij-idea 运行cmd命令并通过Java用数据填充

h9vpoimq  于 2022-11-01  发布在  Java
关注(0)|答案(2)|浏览(301)

我需要使用Java代码创建一个IntelliJ Maven项目。创建新Maven项目的命令是:

mvn archetype:generate -DgroupId=ToolsQA -DartifactId=DemoMavenProject -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

我需要编写通过命令行运行此命令的程序代码。
操作步骤:

  • 运行命令行
  • 进入C方向
  • 输入创建新Maven项目的命令。

谢谢你!

plicqrtu

plicqrtu1#

确保cmd.exePATH中,如果不在,则需要完成它的完全限定路径。例如:

ProcessBuilder pb = new ProcessBuilder(
"C:\\Windows\\System32\\cmd.exe",
"/c",
"cd \" C:\\Program Files\" ",
);

实际上,你不必使用命令来切换执行路径,可以试试目录方法:

String initMvnProjectCommand = "mvn archetype:generate ...";
ProcessBuilder builder = new ProcessBuilder(
        "C:\\Windows\\System32\\cmd.exe",
        "/c",
        initMvnProjectCommand);
builder.directory(new File("${the path you want to execute the command}"));
builder.start();
kkih6yb8

kkih6yb82#

ProcessBuilder不是[Windows] command prompt仿真器。通过类方法,您可以设置要执行的单个命令以及命令的工作目录和环境。
下面的代码执行问题中的命令。它还将工作目录设置为C:\Users\USER。它将命令输出和命令错误输出分别重定向到System.out和System.err。它修改环境。
我没有将C:\apache-maven-3.8.6\bin添加到我的[Windows] PATH环境变量中,因此,在下面的代码中,我使用mvn.cmd的完整路径。

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {

    public static void main(String[] args) {

        ProcessBuilder pb = new ProcessBuilder("C:\\apache-maven-3.8.6\\bin\\mvn.cmd",
                                               "archetype:generate",
                                               "-DgroupId=ToolsQA",
                                               "-DartifactId=DemoMavenProject",
                                               "-DarchetypeArtifactId=maven-archetype-quickstart",
                                               "-DinteractiveMode=false");
        Path path = Paths.get("C:", "Users", "USER");
        File directory = path.toFile();
        pb.directory(directory);
        pb.inheritIO();
        try {
            Process proc = pb.start();
            int status = proc.waitFor();
            System.out.println("Completed with status: " + status);
        }
        catch (InterruptedException | IOException x) {
            x.printStackTrace();
        }
    }
}

如果命令成功完成,则变量status的值应为0(零)。
下面是我运行上面代码时得到的输出:

[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] >>> maven-archetype-plugin:3.2.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO] 
[INFO] <<< maven-archetype-plugin:3.2.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO] 
[INFO] 
[INFO] --- maven-archetype-plugin:3.2.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: C:\Users\USER
[INFO] Parameter: package, Value: ToolsQA
[INFO] Parameter: groupId, Value: ToolsQA
[INFO] Parameter: artifactId, Value: DemoMavenProject
[INFO] Parameter: packageName, Value: ToolsQA
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\Users\USER\DemoMavenProject
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.529 s
[INFO] Finished at: 2022-10-30T20:21:50+02:00
[INFO] ------------------------------------------------------------------------
Completed with status: 0

相关问题