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

编程入门 行业动态 更新时间:2024-10-05 13:23:42

java代码执行maven命令:调用maven接口或者控制台<a href=https://www.elefans.com/category/jswz/34/1768716.html style=两种方式"/>

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

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() {@Overridepublic 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() {@Overridepublic 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();记得销毁,不然程序跑久了电脑会卡

更多推荐

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

本文发布于:2024-02-13 12:43:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758835.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两种   控制台   接口   命令   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!