網(wǎng)站首頁(yè) 行業(yè)快訊 > 正文
插件清理(用Rust清理eclipse自動(dòng)升級(jí)后的重復(fù)插件)
eclipse自動(dòng)升級(jí)版本之后,在/eclipse/plugins目錄仍然會(huì)保留舊版本的插件,想要寫(xiě)一個(gè)腳本清理插件,正好最近剛學(xué)習(xí)rust編程,便用rust開(kāi)發(fā)了一個(gè)eclipse插件清理工具eclean。
本文簡(jiǎn)單介紹清理工具的開(kāi)發(fā)過(guò)程,詳細(xì)源代碼可以在github下載并自行編譯:
gitclonehttps://github.com/leexgone/ecleaner.gitcd./ecleanercargobuild--release
工具支持清理eclipse升級(jí)后plugins目錄下的冗余插件。
清理eclipse插件目錄并將清理插件備份:
ecleanc:\eclipsee:\backup\eclipse
檢測(cè)eclipse目錄下是否含有可清理的插件:
eclean-tc:\eclipse
更多命令可以查閱:
eclean--help創(chuàng)建工程
使用cargo new elean創(chuàng)建工程,調(diào)整Cargo.toml內(nèi)容并在src目錄下創(chuàng)建lib.rs文件。
命令行參數(shù)解析eclean是一個(gè)命令行工具,首先我們需要支持命令行參數(shù)的解析。
rust的clap庫(kù)是一套功能強(qiáng)大的命令行參數(shù)解析庫(kù),這里我們使用clap解析命令行參數(shù)。
1 引用clap庫(kù)在Cargo.toml里加入clap依賴:
[dependencies]clap="33"2 創(chuàng)建Config結(jié)構(gòu)
編輯lib.rs代碼,定義Config結(jié)構(gòu)存儲(chǔ)命令配置信息,使用clap解析命令參數(shù):
usestd::{collections::HashMap,error::Error,fs,io::{self,ErrorKind},path::{Path,PathBuf},usize};usestd::fmt::Display;useclap::{App,Arg};pubstructConfig{dir:String,backup:String,verbose:bool,test:bool,force:bool,}implDisplayforConfig{fnfmt(&self,f:&mutstd::fmt::Formatter<'_>)->std::fmt::Result{write!(f,"[dir={},backup={},verbose={},test={},force={}]",self.dir,self.backup,self.verbose,self.test,self.force)}}implConfig{pubfnnew()->Result<Config,String>{letmatches=App::new("eclean").version("0").author("StevenLee<leexgone@16com>").about("Cleanuptheduplicatedpluginsineclipsepluginsdirectory.").arg(Arg::with_name("DIR").help("Theeclipserootdirectorytobecleaned.The`/plugins`directoryshouldbeunderthisdirectory.").required(true).index(1)).arg(Arg::with_name("BACKUP").help("Specifyabackupdirectorytostoretheremovedplugins.").required_unless("test").index(2)).arg(Arg::with_name("verbose").short("v").long("verbose").help("Useverboseoutput")).arg(Arg::with_name("test").short("t").long("test").help("Scanandfindtheduplicatedplugins,butdonothing")).arg(Arg::with_name("force").short("f").long("force").help("Cleanuptheduplicatedpluginsautomatically.Neverprompt.")).get_matches();letdir=matches.value_of("DIR").unwrap();letbackup=matches.value_of("BACKUP").unwrap_or("");letverbose=matches.is_present("verbose");lettest=matches.is_present("test");letforce=matches.is_present("force");letroot_path=Path::new(dir);if!root_path.is_dir(){letmsg=format!("DIR'{}'doesnotexist",dir);returnErr(msg);}if!test{letbackup_path=Path::new(backup);if!backup_path.is_dir(){letmsg=format!("BACKUPdir'{}'doesnotexist",backup);returnErr(msg);}}Ok(Config{dir:String::from(dir),backup:String::from(backup),verbose,test,force,})}}
Config結(jié)構(gòu)存儲(chǔ)了用戶參數(shù)命令的配置信息:
dir:eclipse目錄(必須)
backup: 清理插件備份目錄(必須,在test模式下可以忽略)
verbose:輸出詳細(xì)日志
test:僅檢測(cè)eclipse插件目錄,不執(zhí)行清理操作
force:不詢問(wèn)用戶強(qiáng)制清理插件
這里我們對(duì)用戶的輸入進(jìn)行了檢測(cè),在目錄不存在時(shí)提示錯(cuò)誤;而必須參數(shù)的校驗(yàn)則通過(guò)clap完成即可。
版權(quán)說(shuō)明: 本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!
猜你喜歡:
- 2022-09-20 男人惡心是什么病的前兆(惡心是什么病的前兆)
- 2022-09-20 山東財(cái)經(jīng)大學(xué)東方學(xué)院考研率怎么樣(山東財(cái)經(jīng)大學(xué)考研率是多少)
- 2022-09-20 廣西最早的大學(xué)叫什么大學(xué)(在桂林設(shè)立的廣西最早的大學(xué)是哪所大學(xué))
- 2022-09-20 小兒肺炎有5個(gè)常見(jiàn)癥狀嗎(小兒肺炎有5個(gè)常見(jiàn)癥狀)
- 2022-09-20 m是哪個(gè)服裝品牌的標(biāo)志(標(biāo)志為M的衣服是什么牌子的)
- 2022-09-20 什么叫正比例什么叫反比例舉例說(shuō)明(什么叫反比例,舉個(gè)例子說(shuō)明,)
- 2022-09-20 一包煙要多少根煙絲(一包煙要多少根)
- 2022-09-20 男人吃櫻桃對(duì)身體有什么好處(男人吃櫻桃有什么好處)
最新文章:
- 2023-07-02 怎樣挑選新鮮的豬肝?(怎么挑選新鮮豬肝 挑選新鮮豬肝的小技巧)
- 2023-07-02 木地板都有哪些種類(木地板的種類有哪些)
- 2023-07-02 白蠟?zāi)炯揖叩膬?yōu)缺點(diǎn)(松木家具的優(yōu)缺點(diǎn))
- 2023-07-02 怎么清洗窗簾布上的污垢(怎么清洗窗簾)
- 2023-07-02 世界上最可愛(ài)的小倉(cāng)鼠的樣子(可愛(ài)小倉(cāng)鼠的種類)
- 2023-07-02 小貓拉不出來(lái)屎怎么辦(小貓拉不出屎怎么辦)
- 2023-07-02 新飛小冰箱耗電量一天多少度(小冰箱耗電量一天多少度)
- 2023-07-02 公司注銷工業(yè)房產(chǎn)怎么辦手續(xù)(公司注銷工業(yè)房產(chǎn)怎么辦)
- 2023-07-02 鳳凰層到底好還是不好(鳳凰層是哪一層)
- 2023-07-02 馬桶寬度空間留多少(馬桶兩邊的空間大小是多少)
- 2023-07-02 如何訓(xùn)練貓咪小便(如何訓(xùn)練貓大小便)
- 2023-07-02 衛(wèi)生間吊頂防潮層做法圖集(衛(wèi)生間吊頂方法是什么)
- 2023-07-02 狗狗為什么總是流口水怎么辦(狗狗為什么愛(ài)流口水)
- 2023-07-02 臥室窗戶漏水由誰(shuí)負(fù)責(zé)維修(臥室窗戶漏風(fēng)怎么辦)
- 2023-07-02 世界名貓大全(世界名貓你知道幾種)
- 2023-07-02 applewatchseries7和6對(duì)比(apple watch series 7和6的區(qū)別)