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() {
    @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();
}*/

代码解析: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() {
     @Override
     public 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();记得销毁,不然程序跑久了电脑会卡

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
这是一个完整可用的Java代码示例,展示了如何使用百度智能云接口来识别图片中的文字,并将识别结果打印到控制台。同时,我还提供了Maven依赖,你可以将其添加到你的项目中。 代码示例: ```java import com.baidu.aip.ocr.AipOcr; import org.json.JSONArray; import org.json.JSONObject; import java.util.HashMap; public class BaiduOCR { // 设置APPID/AK/SK public static final String APP_ID = "your_app_id"; public static final String API_KEY = "your_api_key"; public static final String SECRET_KEY = "your_secret_key"; public static void main(String[] args) { // 初始化AipOcr AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY); // 设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 调用接口 String filePath = "your_image_path"; JSONObject result = client.basicGeneral(filePath, new HashMap<String, String>()); JSONArray wordsResult = result.getJSONArray("words_result"); for (int i = 0; i < wordsResult.length(); i++) { JSONObject obj = wordsResult.getJSONObject(i); System.out.println(obj.getString("words")); } } } ``` Maven依赖: ```xml <dependencies> <!-- 百度AI Java SDK --> <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.14.3</version> </dependency> </dependencies> ``` 请确保将`your_app_id`、`your_api_key`、`your_secret_key`和`your_image_path`替换为你自己的应用信息和待识别的图片路径。 在代码中,我们使用了百度智能云接口的`basicGeneral`方法,它可以识别图片中的通用文字,并返回识别结果。然后,我们遍历识别结果并将其打印到控制台。 在使用百度智能云接口之前,请确保已经在百度智能云控制台上创建了OCR应用,并获取了相应的API Key和Secret Key。另外,确保引入了百度AI的Java SDK依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值