zoukankan      html  css  js  c++  java
  • IEDA生成可运行jar包(包含第三方jar包)的方法

    最近现网需要处理一下数据,来适配一个场景。安排我来编写一个脚本来实现,由于步骤比较多,且需要调用其他服务接口,使用shell脚本来实现比较困难,所以想到了使用shell脚本调用java可执行jar包的方式来实现,期间遇到了很多问题,因此写篇文章记录一下。
    

    IEDA创建Java项目

    打开IEDA,左上角菜单项依次选择File--->New--->Project--->Java--->Next--->Next--->输入项目名称(test)。

    新的java项目就创建好了(不能使用Maven项目,或许可以,我没有研究过)。

    IEDA导入所需三方jar包

    项目中使用httpclient发送请求,使用到了fastjson转换数据,因此需要导入相关jar包作为项目依赖。

    右键项目名--->选择Open Module Setting(默认快捷键F4)--->打开的弹框左侧选择Libraries--->弹框中间点击“+”号--->Java--->在弹出的选择框中选择所依赖的所有jar包(将所有jar包放到同一个library中)--->OK确定

    编写业务逻辑

    编写业务逻辑,入口使用一个main函数调用,以下是代码样例:

    package com.demo;
    
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    import java.io.IOException;
    import java.net.URI;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
        public static void main(String[] args) {
            String url = "http://www.baidu.com";
            String result = doHttpGet(url, new HashMap<>());
            System.out.println(result);
        }
    
        public static String doHttpGet(String url, Map<String, String> param) {
            // 创建Httpclient对象
            CloseableHttpClient httpclient = HttpClients.createDefault();
    
            String resultString = "";
            CloseableHttpResponse response = null;
            try {
                // 创建uri
                URIBuilder builder = new URIBuilder(url);
                if (param != null) {
                    for (String key : param.keySet()) {
                        builder.addParameter(key, param.get(key));
                    }
                }
                URI uri = builder.build();
                // 创建http GET请求
                HttpGet httpGet = new HttpGet(uri);
                // 执行请求
                response = httpclient.execute(httpGet);
                // 判断返回状态是否为200
                if (response.getStatusLine().getStatusCode() == 200) {
                    resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (response != null) {
                        response.close();
                    }
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return resultString;
        }
    }
    

    创建jar包打包规则

    右键项目名--->选择Open Module Setting(默认快捷键F4)--->打开的弹框左侧选择Artifacts

    点击中间的“+”号,选择JAR--->From modules with dependencies

    Main class右侧单机文件夹图标,选择自己编写main方法的类:

    extract to the target Jar:表示将依赖的三方jar包打包到目标jar包里面,通过这种方式打包的jar包,最终只有一个jar文件,我个人比较喜欢

    copy to the output directory and link via manifest:将依赖的jar包拷贝到某个路径下,并且通过mainifest进行链接,这种情况下依赖的三方jar包会以独立jar包的方式存在

    Directry for META-INF/MAIFEST.MF:指定mainifest文件生成路径,如果上面选择了copy to the output directory and link via manifest,那么这个文件要确保和生成的jar包放在同一个目录下,否则会出现生成的jar包引用不到第三方jar包的方式,这里我们将第三方jar包打包到目标jar包中,不存在这个问题,所以使用默认路径即可。

    点击OK后,记住Output directory的路径,也可以自定义路径:

    然后点击OK

    生成jar包

    点击Build--->Build Artifacts

    会看到上面定义好的jar包

    Build:第一次生成jar包时,选择Build生成jar包

    Rebuild:后面修改了程序后,只需要执行Rebuild即可。

    由于是第一次生成jar包,我这里点击Build,等IEDA任务处理完后,前往F:javacode estoutartifacts est_jar路径下,在地址栏内输入“cmd”,调用命令行程序。

    在命令行中输入java -jar test.jar回车运行:

    有内容返回,说明jar包执行成功。

    将test.jar文件复制到其他路径,再次执行java -jar test.jar进行验证,也可以正常执行,说明jar包打包成功。

  • 相关阅读:
    BZOJ 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/fengweiweicoder/p/13910501.html
Copyright © 2011-2022 走看看