java代码执行maven命令:调用maven接口或者控制台两种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36688143/article/details/85121532

1、java代码执行maven命令:调用maven接口

    1)首先下载maven-invoker.jar

<dependency>
    <groupId>org.apache.maven.shared</groupId>
    <artifactId>maven-invoker</artifactId>
    <version>3.0.1</version>
</dependency>

注意:如果你下载的maven-invoker.jar版本是2.1.1这种,而你的maven版本是3.3.1以上,接下来执行代码的时候会报错

因为在maven3.3.1版本mvn.bat被mvn.cmd取代了,已经没有mvn.bat了,所以我们需要下高版本的maven-invoker.jar,高版本会兼容mvn.cmd。具体哪个版本我没试,直接选了个当前最高的3.0.1版本。

     

    2)完整调用maven接口代码如下,使用的时候请打开注释,以获得绝佳体验

InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile( new File( "pom.xml" ) );
request.setGoals( Collections.singletonList( "compile" ) );

Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File("D:/work/environment/Maven/apache-maven-3.3.9"));

/*invoker.setLogger(new PrintStreamLogger(System.err,  InvokerLogger.ERROR){
                
} );
invoker.setOutputHandler(new InvocationOutputHandler() {
    @Override
    public void consumeLine(String s) throws IOException {

    }
});
*/

try
{
  invoker.execute( request );
}
catch (MavenInvocationException e)
{
  e.printStackTrace();
}



/*try{
    if(invoker.execute( request ).getExitCode()==0){
          System.out.println("success");
    }else{
          System.err.println("error");
    }
}catch (MavenInvocationException e) {
    e.printStackTrace();
}*/

代码解析:new File( "pom.xml" ):你的pom.xml文件的路径

Collections.singletonList( "compile" ):这里的compile可以改成你想要的maven命令

invoker.setMavenHome(new File("D:/apache-maven-3.3.9")):这里填你的maven_home,也就是maven安装路径

invoker.execute( request ):验证代码是否运行成功,可以获得它的ExitCode

到这里调用maven接口实现maven命令的功能已经完成了,但是通过控制台,我们发现它会输出很多编译时候的提示信息

所以接下来需要改进一下代码(打开注释),图中1处属于[WARN]级别的提示信息。我们需要改成[ERROR]级别,低于ERROR,就不要输出了

invoker.setLogger(new PrintStreamLogger(System.err,  InvokerLogger.ERROR){

} );

 图中2处属于maven编译的提示信息,所以我们需要重写consumeLine()方法

invoker.setOutputHandler(new InvocationOutputHandler() {
     @Override
     public void consumeLine(String s) throws IOException {

     }
});

2、java代码执行maven命令:通过控制台实现

Runtime runtime=Runtime.getRuntime();
Process process=null;
try {
     process= runtime.exec("cmd /c   cd D:\\work\\MyWordSpace\\HotSwap && mvn compile");
     process.waitFor();
     process.destroy();
} catch (IOException e) {
     e.printStackTrace();
}

解析runtime.exec("cmd /k cd D:\\work\\MyWordSpace\\HotSwap && mvn compile");

cmd /c dir:是执行完dir命令后关闭命令窗口;

cmd /k dir:是执行完dir命令后不关闭命令窗口。

cd D:\\work\\MyWordSpace\\HotSwap && mvn compile:这里有两个命令,两个命令之间要用&&连接

process.destroy();记得销毁,不然程序跑久了电脑会卡

猜你喜欢

转载自blog.csdn.net/qq_36688143/article/details/85121532
今日推荐