公司終于還是決定買jira。于是要開始把bugzilla上面原有的bug數據遷移到jira上面。
一開始考慮的方法是導出成csv文件再在jira中導入,可是這樣做的話很多關聯的數據就很難處理,而且所有的附件(截屏)都無法遷移。
搜索了一下,http://www.atlassian.com/software/jira/docs/v3.1.1/bugzilla_import.html 上面介紹說現在直接從mysql遷移數據過來已經可以保留所有附件了,不過看到其他一些人的評論,估計遷移過程還是會有各種麻煩。先不管,按照說明動手倒倒看。果然出錯了:
Select Bugzilla projects to import |
Step 2 of 3: Select Bugzilla projects to import |
Form Errors:
...... |
查了一下,有可能是數據庫版本太高造成的。因為bugzilla和其他的項目共用了一個mysql5.0,Unknown type '246 大概是mysql5.0里面新的數據類型標記,舊的jdbc連接器無法識別它。
上 http://downloads.mysql.com/snapshots.php 下了最新的connector(就是jdbc驅動)回來解壓后把里面的jar文件放到jira的WEB-INF/lib目錄下,關掉jira后刪掉舊的connector,重開jira,遷移成功了。
進jira看看,bug都過來了,附件也都可以看,可是全部中文提示都變成亂碼了
試試將jdbc的url加上useUnicode=true&characterEncoding=gbk,還是一樣。
在clark的提醒下,改了my.ini里面的default-character-set=latin1改成default-character-set=gbk了,不但jdbc出來的仍舊是亂碼,連bugzilla都顯示亂碼了,還是改回去。
上網繼續搜,終于在java 與 mysql 中文問題的處理 看到了令人比較滿意的解釋:Mysql的connectorJ里面有bug(可是這么久了就是沒有改正呢?)。現在有兩個解決方案,一是改mysql的源碼,自己編譯connectorJ,二是是改BugzillaImportBean.java 的代碼,自己編譯并替換jira的BugzillaImportBean.class
網上 有人在抱怨BugzillaImportBean.java很不好改,那么長一串import要一個一個添到classpath里面都要辦天,不知道那位老兄是不是只用VI寫java的。我們用IDE的比他幸福多了。在jira目錄下搜出來全部jar文件,拷貝到一個目錄下,然后在JBuilder的config libraries 里面添加一個jira目錄,把這下jar文件全部天到這個目錄下,順便把jira的classes目錄的路徑也添加到這個目錄下,然后開一個工程引用這個目錄進來,在工程里面建com.atlassian.jira.util包,然后把BugzillaImportBean.java放進去就可以編譯通過了。改一個試試看:
fields.put(IssueFieldConstants.SUMMARY, new String(resultSet.getString("short_desc").getBytes("ISO8859-1")));
編譯后替換調jira的BugzillaImportBean.class,果然不錯。
改后的完整源碼和編譯后的類文件在這里。
至于方案一,請看我的另一篇文章:MySQL 的jdbc為何不能正確的編碼漢字