程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 修改IntelliJ IDEA中CVS插件以兼容其他cvs工具

修改IntelliJ IDEA中CVS插件以兼容其他cvs工具

編輯:關於JAVA

論壇討論請見:http://community.csdn.Net/Expert/topic/3492/3492097.XML?temp=.1520502

IDEA的CVS是我見過功能最強,最好用的CVS客戶端,其與IDEA工程的整合幾乎達到了天衣無縫的地步。一個團隊如果統一使用IDEA,則僅在CVS工具這一方面就會大大減輕團隊成員的學習負擔。 IDEA的CVS插件支持兩種編碼方式: UTF8和ASCII。本來是彌補了CVS系統本身不支持國際化的缺陷。但是在實際使用中,卻發現這兩種編碼方式有些“高不成低不就”。

在UTF8編碼方式下,當Commit的log信息為中文時,IDEA會將其進行UTF8編碼再發送給服務器,而一般的CVS服務器(比如我用的CVSNT)會不進行任何轉化的將其保存到CVS倉庫中。這樣的結果就是IDEA自己能夠看到各個版本的log信息,而其他工具如WinCVS, TortoriseCVS以及CVSTracNT等跟蹤軟件都無法正確的解碼。反之,如果用其他CVS客戶端提交了中文log的話,IDEA裡的ShowHistory命令就會報錯。讓人最為不解的是,僅僅只有log信息是被編碼過的,源文件中如果含有中文,則仍然采用GB的編碼方式。如果你是CVS的管理員,會在xxxxx.Java, v文件中同時發現GB編碼和UTF8編碼的中文。怎能不亂? 此外在UTF8編碼方式下,當源文件中含有中文字符時,Annotate功能是不能使用的。

如果不使用UTF8編碼,即使用ASCII編碼的時候,Annotate功能是沒有問題,但是Commit的時候無法提交中文log信息,報編碼錯誤。ShowHistory時看外界提交的中文log是亂碼。

說了這麼多,一句話,中文編碼問題。如何解決呢?上面的帖子發了半年也沒有結,在IDEA官方論壇上也問過,但是因為都是老外,最後還是沒有理想的答案。我於幾日前得到了Irida版本,發現CVS插件的jar包並沒有混淆(4.5版本是混淆的, 要讀簡直是不可能的),於是進行了反編譯(呵呵不要告我),經過分析發現,最終的問題出在org\netbeans\lib\cvsclient\io目錄下的AsciiOutputStreamWriter和AsciiInputStreamReader中。經過簡單的修改(只要解決過Java的中文編碼問題,這個修改不是什麼難事),終於把這個問題搞定了! 請於http://www.jroller.com/resources/WarBaby/CvsPatchForIrida.zip下載這個補丁,打開%IDEAHOME%\plugins\cvsIntegration\lib\cvsIntegration.jar,用補丁裡的class文件覆蓋org\netbeans\lib\cvsclient\io下的同名文件即可。這是Irida的修改方法,4.5版本的稍有不同,這裡只點一句,org\netbeans\lib\cvsclient\io\AsciiOutputStreamWriter.java == org\a\a\a\b\f.javaorg\netbeans\lib\cvsclIEnt\io\AsciiInputStreamReader.java == org\a\a\a\b\c.Java請愛好者自己反編譯再編譯就好了。

修改後,請!不要!選中UTF-8 encoding,上面的問題就完全解決了。對於以前用IDEA提交的中文log,現在是顯示亂碼的,但是如果選中UTF-8 encoding則和以前的IDEA完全一樣。所以請放心使用。 只有一點需要說明一下,我在AsciiInputStreamReader中,為了效率問題,建了幾個靜態變量,可能會線性不安全。但是我看見IDEA操作CVS的時候,窗口是模態的,無法進行其他操作。萬一有問題請自行處理吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved