两种方式"/>
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接口或者控制台两种方式
发布评论