最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成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
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
list) { - // 指定文件路径和文件名
- /*String filePath = "D:";
- String fileName = "sp_barcode_test.txt";*/
-
- // 创建BufferedWriter对象
- try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath + "/" + fileName))) {
- // 将List
中的每个元素写入文件中 - 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
到这就搞定了,完工。功能不复杂,但是涉及的知识点挺多的,希望能帮助到大家