更多操作maven工具参见:http://maven.apache.org/shared/index.html
maven-invoker执行maven命令
方式一:
1、引入pom
<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以上,接下来执行代码的时候会报错:mvn.bat not found
因为在maven3.3.1版本mvn.bat被mvn.cmd取代了,已经没有mvn.bat了,所以我们需要下高版本的maven-invoker.jar,高版本会兼容mvn.cmd。具体哪个版本我没试,直接选了个当前最高的3.0.1版本。
2、调用代码(打开注释获得更佳体验)
InvocationRequest request = new DefaultInvocationRequest(); //设置pom文件路径 request.setPomFile( new File( "pom.xml" ) ); //执行的maven命令 request.setGoals( Collections.singletonList( "compile" ) ); Invoker invoker = new DefaultInvoker(); //maven安装路径 invoker.setMavenHome(new File(SystemUtil.get("MAVEN_HOME"))); //设置仓库地址 invoker.setLocalRepositoryDirectory(new File("/usr/local/resp")); //日志处理 /*invoker.setLogger(new PrintStreamLogger(System.err, InvokerLogger.ERROR){ }); //重写maven输出显示信息 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(); }*/
方式二:通过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(); }
cmd /c dir:是执行完dir命令后关闭命令窗口;
cmd /k dir:是执行完dir命令后不关闭命令窗口。
cd D:\work\MyWordSpace\HotSwap && mvn compile:这里有两个命令,两个命令之间要用&&连接
process.destroy();记得销毁,不然程序跑久了电脑会卡
maven-model解析pom文件
1、引入maven依赖
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <version>3.6.0</version> </dependency>
2、解析pom
//pom 为 pom.xml 路径 FileInputStream fis = new FileInputStream(new File(pom)) MavenXpp3Reader reader = new MavenXpp3Reader(); Model model = reader.read(fis);