idea把项目打成jar包步骤详解

最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。

打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法,然后通过这个main方法调用我们的核心逻辑代码。下面是我的代码示例:

java 复制代码
public static void main(String[] args)
    {
        System.out.println("启动成功");
        JSONObject json = new JSONObject();
        //要处理的文件路径
        json.put("filePath",args[0]);
        //休眠秒数的因子
        json.put("millisecond",args[1]);
        //输出文件的路径
        json.put("writeFilePath",args[2]);
        //输出文件的名称(需提前创建)
        json.put("writeFileName",args[3]);
        //打印参数
        System.out.println(json.toJSONString());
        //调用核心处理方法
        getData(json);
    }

核心代码:

java 复制代码
/**
     * 获取数据
     * @param params
     * @return
     */
    private static JSONObject getData(@RequestBody JSONObject params)
    {
        JSONObject ret = new JSONObject();
        ret.put("code","1");
        ret.put("message","执行成功");
        //String filePath = PropertiesUtil.getProp(PropertiesUtil.FILE_SYSTEM, "splib.barcode.path") + "/sp_barcode_200.txt";
        String filePath = params.getString("filePath");
        Long milliseconds = StringUtil.toLong(params.get("millisecond"));
        List<String> result = new ArrayList<>();
        try (FileReader fileReader = new FileReader(filePath);
                BufferedReader bufferedReader = new BufferedReader(fileReader)) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                // 在这里根据实际需求对每一行进行处理
                if(StringUtil.isNotEmpty(line)){
                    int random = (int) (Math.random() * StringUtil.toInteger(milliseconds));
                    logger.info("休眠{}毫秒再执行",random);
                    System.out.println(String.format("休眠%s毫秒再执行>>>>>>>",random));
                    Thread.sleep(random);
                    String barcode = line.replace(",", "");
                    String s1 = HttpUtils.httpClientGet(String.format(GDS_API_URL,barcode), 4000);
                    System.out.println("s1>>>>>>>" + s1);
                    String s2 = HttpUtils.httpClientGet(String.format("%s%s",GDS_URL,barcode), 4000);
                    System.out.println("s2>>>>>>>" + s2);
                    result.add(s2);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("io异常:",e);
            ret.put("code","0");
            ret.put("message","执行失败");
        }catch(InterruptedException e){
            e.printStackTrace();
            logger.error("InterruptedException异常:",e);
            ret.put("code","0");
            ret.put("message","执行失败");
        }
        if(CollectionUtil.isNotEmpty(result)){
            String code = writeTxt(params.getString("writeFilePath"), params.getString("writeFileName"), result);
            if(!"1".equals(code)){
                ret.put("code","0");
                ret.put("message","写文件失败");
            }
        }
        return ret;
    }

    /**
     * 写文件
     */
    private static String writeTxt(String filePath,String fileName,List<String> list){
        // 指定文件路径和文件名
        /*String filePath = "D:";
        String fileName = "sp_barcode_test.txt";*/

        // 创建BufferedWriter对象
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath + "/" + fileName))) {
            // 将List<String>中的每个元素写入文件中
            for (String str : list) {
                writer.write(str);
                writer.newLine(); // 写入换行符
            }
            System.out.println("文件已成功写入!");
            logger.info("文件已成功写入");
            return "1";
        } catch (IOException e) {
            System.out.println("写入文件时出现错误:" + e.getMessage());
            logger.error("写入文件时出现错误:",e);
            return "0";
        }
    }

上面是我的代码示例,只是给大家一个演示,不必关心里面的功能。下面来演示如何把该文件所在项目打成jar包。

1.点击 File ==> Project Structure ==> Artifacts ==> 点击加号 ==> 选择JAR ==> 选择From modules with dependencies

我们需要把所依赖的其他项目包都打进来的话,按下图所示

点击ok===>apply===>继续ok

选择Build===>build artifact,找到自己的jar包那条目录

先点击 clear 进行清除,然后再点击 Build 进行构建,就可以打成一个jar包了,就可以在我们设置的输出目录看到对应的jar包了

我此处把这个目录压缩成.zip包,便于上传到服务器。

连上服务器,建好对应项目的文件夹(注意目录权限),rz命令上传zip包,unzip解压

由于我的main方法中需要传四个参数,不然程序运行会报错,所以启动的时候,需要在命令行传上所需的参数:

bash 复制代码
java -jar spcenter.jar \/home\/spcenter\/spcenter_jar\/sp_barcode.txt 10000 \/home\/spcenter\/spcenter_jar test.txt

说明:
要处理的文件:\/home\/spcenter\/spcenter_jar\/sp_barcode.txt
随机数的参数:10000 
输出文件目录:\/home\/spcenter\/spcenter_jar
输出文件名称:test.txt

到这就搞定了,完工。功能不复杂,但是涉及的知识点挺多的,希望能帮助到大家

相关推荐
@淡 定9 小时前
缓存原理详解
java·spring·缓存
带刺的坐椅9 小时前
超越 SpringBoot 4.0了吗?OpenSolon v3.8, v3.7.4, v3.6.7 发布
java·ai·springboot·web·solon·flow·mcp
就叫飞六吧9 小时前
基于spring web实现简单分片上传demo
java·前端·spring
apihz9 小时前
免费手机号归属地查询API接口详细教程
android·java·运维·服务器·开发语言
程序员小假9 小时前
学院本大二混子终于找到实习了...
java·后端
lvbinemail9 小时前
svn的web管理后台服务svnWebUI
运维·前端·svn·jar
回吐泡泡oO9 小时前
找不到rar.RarArchiveInputStream?JAVA解压RAR5的方案。
java·开发语言
jiayong239 小时前
AI应用领域编程语言选择指南:Java vs Python vs Go
java·人工智能·python
bjzhang759 小时前
IDEA 2025.3重磅发布,Ultimate 终极版和 Community社区版二合一,免费版可商用
java·idea
程序猿零零漆9 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(三)Bean的依赖注入配置、Spring的其它配置标签
java·学习·spring