天天看點

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();
        config.setMaxIdle(); // 對象最大空閑時間
        config.setMaxWaitMillis(); // 擷取對象最大等待時間。
        config.setTestOnBorrow(true);
        String host = "127.0.0.1";
        int port = ;
        List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>();
        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方法運作下去

具體的過程看下圖:

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

在晚上上述三步之後,就完成了編譯的過程。接着需要把輸出的jar包上傳到伺服器上進行運作。

Javac 編譯包含 import 第三方jar包的.java 檔案
infroad.txt 這個裡面是包含了我json字元串的檔案,裡面每一段json都是按照&作為分割符号進行分割的。具體看代碼

然後使用指令行運作這個jar檔案即可。

java -jar kkkkkkkskk.jar