要想提高工作效率,必須得有好的工具。大數據有很多組件,但是邪了門兒的就是,竟然沒有一個好用的客戶端程序。
沒辦法,我只好用antd+webview自己做了一款跨平台的桌面應用。
先看下效果。
這是github地址:https://github.com/CJSoldier/whitepawcat。我一個人做有點孤單,還有點累,希望能跟大家一起玩。
為什么要做成桌面應用,做成web服務,用瀏覽器不好嗎?
我覺得不好。因為我經常打開太多tab頁了,到時候就不知道哪個tab也是咱們的大數據客戶端程序了。而且當我們把右邊所有的tab都關閉時,很可能會把我們的大數據客戶端也關了。還有一個不好的地方就是沒辦法用alt+tab來切換應用。
做成web服務的形式不是不可以,但是比較尷尬。首先它會占用一個端口,我不喜歡看到“端口沖突” 的錯。
更重要的是,做成web服務的話,jar包沖突怎么解決? 就算自定義一個classloader,每次加載不同的jar包。但是這個http服務什么時候開啟呢?
在雙擊程序之后就立馬啟動還是提前部署到某個地方?
要知道這是桌面應用誒,桌面應用不應該是一雙擊就能用的嗎?
為什么不用electron?
因為打包后文件太大,而且啟動速度太慢。VS Code啟動速度很快呀。 對,但它是微軟出品的。一般情況下用electron打包的程序啟動很慢的。我試過。
為什么不用bootstrap+jquery?
因為react可以做成單頁面,這樣看起來更像桌面程序。而且,似乎react渲染的更快一些。
為什么用自定義一個classloader來加載Jar包?
這是為了解決jar包沖突的問題。試想一下,我要連接兩個版本的Hbase,一個是0.94,一個是1.2.0,如果jar包都放在一起沖突了怎么辦?
為什么Java代碼不做成服務的形式
我不想占用用戶的端口。而且我覺得這是個真·桌面程序,不想讓它看起來像一個web程序。
webssh不還是用了bootstrap+jquery?不還是要占用一個端口?
問的好。 我自己沒本事做一個ssh客戶端程序。只好把huashengdun/webssh直接拿來用了。 這個我也是無奈。如果你有心,你可以用react-xterm+java來做一個ssh,感激不盡。
為什么有很多硬編碼?
約定大於配置,我是這樣安慰自己的。
為什么代碼看起來很矬?
Keep it simple stupid,我是這樣安慰自己的。
為什么沒有Linux版本的?不是號稱跨平台嘛?
問的好。因為webview在linux下編譯需要安裝gtk-webkit。我沒裝成功。
這是zserge/webview的地址: https://github.com/zserge/webview.
你可以按文檔說的試一下,其實不難的。
感覺開發起來好復雜
乍一看是復雜,我在寫README的時候就感覺到了。 仔細一想其實不復雜。 C代碼不用動,第一步就不用編譯了。webssh我也已經編譯好了。除非你修改了需要重新編譯,否則直接從release里拷貝一份就可以了。 剩下的就跟開發web應用一模一樣了。