zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    Troubleshooting FIM: (No Display Name) in FIM Portal
    FIM2010同步用户
    Problem with WinRM on Exchange 2013 Management Shell and Exchange Toolbox on a new exchange 2013 with CAFE and BE on single server installation
    SAML : A SAML stack
    Flutter-使用Custompaint绘制一个圆圈进度条
    Flutter-自绘组件CustomPaint
    AnimatedSwitcher
    入职一个月
    flutter--static关键字
    Flutter-变量初始化问题
  • 原文地址:https://www.cnblogs.com/leskang/p/14428528.html
Copyright © 2011-2022 走看看