1. 程式人生 > >Javac 編譯包含 import 第三方jar包的.java 檔案

Javac 編譯包含 import 第三方jar包的.java 檔案

昨天遇到了一個奇葩的需求:把偽造的資料持久化到Linux伺服器的Redis中

要說的話,其實也是很簡單的。大概有那麼幾種方法可以例項化到Redis中。

  1. 直接在Linux上使用Redis 命令把相應的key值和value值寫入。
  2. 寫一個.java的方法,使用jedis 把相應的key 和value寫入到Redis中

但是,由於資料條數很多,且都是比較長的JSON字串。所以我不大可能會直接在Linux上操作Redis客戶端。所以簡便有效的方式就是寫一個.java 檔案批量處理然後寫入。

那麼問題來了:
我的.java檔案需要在Linux上使用javac編譯並執行。
但是由於我的java檔案中import有第三方jar的內容,直接進行javac編譯的話會報錯。
程式碼如下:

package com.example;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List
; import java.util.regex.Pattern; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class AddCompleteInfo { static ShardedJedisPool pool;
static { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(100); config.setMaxIdle(20); // 物件最大空閒時間 config.setMaxWaitMillis(5000); // 獲取物件最大等待時間。 config.setTestOnBorrow(true); String host = "127.0.0.1"; int port = 6379; List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>(2); JedisShardInfo infoA = new JedisShardInfo(host, port); jdsInfoList.add(infoA); pool = new ShardedJedisPool(config, jdsInfoList); } public static void main(String[] args) { String file = "/testJva/infroad.txt"; String reader = AddCompleteInfo.reader(file); Pattern p = Pattern.compile("&"); String[] split = p.split(reader); for (String string : split) { System.out.println("分開的值是:"+string); JSONObject parseObject = JSON.parseObject(string); String token = parseObject.getString("token"); System.out.println("token的值是:"+token); ShardedJedis jedis = pool.getResource(); jedis.set(token, string); jedis.sadd("ALLTOKEN", token); jedis.sadd("COMPLETED", token); if (jedis != null) jedis.close(); } public static String reader(String filePath) { try { File file = new File(filePath); if (file.isFile() && file.exists()) { InputStreamReader read = new InputStreamReader( new FileInputStream(file), "UTF-8"); BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = bufferedReader.readLine(); while (lineTxt != null) { return lineTxt; } } } catch (UnsupportedEncodingException | FileNotFoundException e) { System.out.println("Cannot find the file specified!"); e.printStackTrace(); } catch (IOException e) { System.out.println("Error reading file content!"); e.printStackTrace(); } return null; } }

最後使用Eclipse將只包含主要程式碼的java專案,打成一個Runnable JAR file的 jar包
然後在Linux上使用,java -jar + jar包名稱 的方式來執行,這樣,就可以直接使得.java檔案中的main方法執行下去

具體的過程看下圖:
打jar包
選擇編寫包含main方法的.java檔案
這裡寫圖片描述
在晚上上述三步之後,就完成了編譯的過程。接著需要把輸出的jar包上傳到伺服器上進行執行。
這裡寫圖片描述

infroad.txt 這個裡面是包含了我json字串的檔案,裡面每一段json都是按照&作為分割符號進行分割的。具體看程式碼

然後使用命令列執行這個jar檔案即可。

java -jar kkkkkkkskk.jar