Android jar 腳本自動化實踐,可視化java swing工具

日常開發過程中將一些頻繁操作進行自動化腳本處理,可以做到事半功倍。把時間花費到重要的事情上面。最近進行項目自動化處理,寫了一個java swing的工具,開發過程中遇到的問題記錄如下。

首先介紹下如何將java程序打成可執行的jar

方式1 eclipse ide
方式2 IntelliJ ide

早期用eclipse進行可執行jar打包,最近使用intelJ 打包。這裏介紹intelJ ide簡單打包方式。

用到ide版本: IntelliJ IDEA Educational Edition 2019.3 x64

如圖
在這裏插入圖片描述
File–>projectStructure -->Artifacts–>JAR–>From modules with dependenties

在這裏插入圖片描述
選擇打入jar的module文件夾,選擇啓動主類,也就是程序的入口main()函數的類。點擊確定

然後build jar

在這裏插入圖片描述

查看可執行jar包輸出位置。
在這裏插入圖片描述
步驟2.

進入cmd窗口。驗證

在這裏插入圖片描述

不出意外的話,命令就可以執行了。如果是java swing寫的jar。就會打開swing窗口了。

步驟3

開發過程中遇到需要對jar包中文件進行替換的操作。方案採用jar腳本進行修改。

在這裏插入圖片描述

命令1.替換jar包中文件夾

jar uvf xxxx.jar jar包中文件夾/

tip: 命令1替換爲全部替換,並不會替換單個文件。比如jar包中有test文件夾,包含1,2,3,4 文件。 如果替換 test文件內的某一個文件,需要在同級目錄建立test文件夾並且包含 1,2,3,4文件。否則,會用外部同級test替換jar中test。外部test包含 1,2,替換之後jar包中test文件夾中的1,2,3,4 文件會被替換爲1,2。

命令2 替換jar包中嵌套文件jar

jar uvf xxxx.jar jar包中文件夾/嵌套文件夾/

tips:層級目錄一定要一致。

命令3 將某文件夾下的文件打入jar包目錄下。層級不需要一致
jar uf xxx.jar -C 需要打入jar目錄下的文件路徑 . (最後面是一個點 .)

以上命令在cmd窗口中執行沒有問題,如果使用java程序進行運行,效果還不一致。如下一個執行cmd命令的jar類。

		public static int ececute(String cmd,boolean isNeedPrint)
		{
			Process proc = null;
			int result = -1;
			try {
				List<StreamReader> list = new ArrayList<StreamReader>();
				proc = Runtime.getRuntime().exec(cmd);
				StreamReader error = new StreamReader(proc.getErrorStream(), "Error");
				StreamReader output = new StreamReader(proc.getInputStream(), "Output");
				
				if (isNeedPrint) {
					
					list.add(error);
					list.add(error);
				}
				
				error.start();
				output.start();
				if (isNeedPrint) {
					for (StreamReader sr : list) {
						sr.join();
					}
				}
				result = proc.waitFor();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				proc.destroy();
			}
			
			return result;
		}
package panel;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
public class StreamReader extends Thread
{
 
    InputStream is;
 
    String type;
 
    StreamReader(InputStream is, String type)
    {
        this.is = is;
        this.type = type;
    }
 
    public void run()
    {
        InputStreamReader isr = null;
        BufferedReader br = null;
        try
        {
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null)
            {
                System.out.println(line);
            }
        }
        catch (IOException ioe)
        {
            ioe.printStackTrace();
        }
        finally
        {
            close(isr, br);
        }
    }
 
    public void close(InputStreamReader isr, BufferedReader br)
    {
        if (null != br)
        {
            try
            {
                br.close();
            }
            catch (IOException e)
            {
                br = null;
            }
        }
 
        if (null != isr)
        {
            try
            {
                isr.close();
            }
            catch (IOException e)
            {
                isr = null;
            }
        }
    }
 
}

tips 。使用命令 jar uvf xxxx.jar -C 文件路徑\路徑\ ,會導致jar中自動生成的mete-info 被忽略,測試了下被忽略後沒有影響,依然可以正常使用。

如圖
在這裏插入圖片描述

整理:

通過幾天研究,瞭解java swing機制,通過將命令行界面化提供給非開發人員使用,學習成本更低。瞭解了jar 腳本的使用方法。將一些需要收到頻繁操作步驟改成界面方式一鍵處理,大大提高了效率。解放了雙手。

成品
在這裏插入圖片描述

在這裏插入圖片描述

看似簡單處理,將過去需要通過手動調整配置文件,改爲自動。一次大概可以省下來十多分鐘,對於頻繁出包改配置操作,可想而知。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章