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

2023-09-14 19:59:02

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

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

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);
    }

核心代码:

/**
     * 获取数据
     * @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方法中需要传四个参数,不然程序运行会报错,所以启动的时候,需要在命令行传上所需的参数:

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

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

更多推荐

Dubbo常考知识点

Dubbo常考知识点Dubbo⽀持哪些负载均衡策略Dubbo是如何完成服务导出的?Dubbo是如何完成服务引⼊的?Dubbo的架构设计是怎样的?Dubbo⽀持哪些负载均衡策略随机:从多个服务提供者随机选择⼀个来处理本次请求,调⽤量越⼤则分布越均匀,并⽀持按权重设置随机概率轮询:依次选择服务提供者来处理请求,并⽀持按权重

彩虹医疗器械彩超、内窥镜维修技术学习

近几年随着医疗行业的快速发展,医疗器械的需求量不断增加,同时对医疗器械的维修和保养需求也在不断增长随着医疗技术的不断进步,新型、复杂的医疗器械不断涌现,这对维修技术提出了更高的要求。加强技术研发是必经之路,通过加强工程师培训、提高工程师工作效率和质量等方式来提升公司的整体竞争力。设备维修人员要注重专业素养和技能水平的提

C++day7

仿照vector手动实现自己的myVector,实现二倍扩容功能#include<iostream>usingnamespacestd;template<typenameT>classmy_vector{intsize;//可存储的容量大小intnum;//当前存储的元素个数T*data;//存储数据的空间地址publ

Pytorch从零开始实战03

Pytorch从零开始实战——天气识别本系列来源于365天深度学习训练营原作者K同学文章目录Pytorch从零开始实战——天气识别环境准备数据集模型选择模型训练数据可视化总结环境准备本文基于Jupyternotebook,使用Python3.8,Pytorch2.0.1+cu118,torchvision0.15.2,

虚幻4学习笔记(12)操控导入的角色、动画蓝图、播放蒙太奇和打包、角色重定向

虚幻4学习笔记操控导入的角色设置鼠标旋转关掉动态模糊动画蓝图、播放蒙太奇和打包角色走路奔跑动画shift奔跑F跳舞移动打断跳舞打包角色重定向姿势调整解决跑步腿分太开隐藏剑B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732操控导入的角色新建项目导入角色模型FBX保存

JavaScript -【第四周】

文章来源于网上收集和自己原创,若侵害到您的权利,请您及时联系并删除数组知道什么是数组及其应用的场景,掌握数组声明及访问的语法。1.数组是什么?数组:(Array)是一种可以按顺序保存数据的数据类型【为什么要数组】:思考:如果我想保存一个班里所有同学的姓名怎么办?使用场景:如果有多个数据可以用数组保存起来,然后放到一个变

神经网络-pytorch版本

pytorch神经网络基础torch简介torch和numpyimporttorchimportnumpyasnpnp_data=np.arange(6).reshape((2,3))torch_data=torch.from_numpy(np_data)tensor2array=torch_data.numpy()p

openssl创建CA证书教程

配置生成CA证书总示意图:(1),通过openssl创建CA证书第一步:创建一个秘钥,这个便是CA证书的根本,之后所有的东西都来自这个秘钥#通过rsa算法生成2048位长度的秘钥opensslgenrsa-outmyCA.key2048第二步:是通过秘钥加密机构信息形成公钥#公钥包含了机构信息,在输入下面的指令之后会有

4G工业路由器,开启智能工厂,这就是关键所在

​提到工业物联网,首先联想到的就是数据传输。要把海量的工业数据从设备端传到控制中心,无线数传终端就发挥着重要作用。今天就跟着小编来看看它的“联”是怎么建立的吧!原文:https://www.key-iot.com/iotlist/1838.html一提到无线数传终端,相信大家首先想到的是DTU模块。其实按照功能定位,又

中尺度混凝土二维有限元求解——运行弯曲、运行光盘、运行比较、运行半圆形(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述中尺度混凝土二维有限元求解是一种常见的工程分析方法

【Redis面试题(46道)】

文章目录Redis面试题(46道)基础1.说说什么是Redis?2.Redis可以用来干什么?3.Redis有哪些数据结构?4.Redis为什么快呢?5.能说一下I/O多路复用吗?6.Redis为什么早期选择单线程?7.Redis6.0使用多线程是怎么回事?8.Redis持久化⽅式有哪些?有什么区别?9.RDB和AOF

热文推荐