Loading

java调用maven

更多操作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);

 

 

posted @ 2021-02-22 09:48  梦醒点灯  阅读(2104)  评论(0编辑  收藏  举报