1. 程式人生 > >第一次玩github,第一個開源小專案——xxoo

第一次玩github,第一個開源小專案——xxoo

引言

  由於最近的工作寫程式碼比較少,這讓LZ產生了一絲危機感。於是便想找一個辦法可以沒事自己寫寫程式碼,自然而然就想到了github。接下來便是一陣搗鼓的過程,其實整個過程很快,主要過程就是註冊一個賬號,然後建立自己的倉庫。看著自己空蕩蕩的倉庫,LZ就想著放上去一些自己平時寫的東西,不過仔細一翻才發現,自己平時寫的程式碼都是一片一片的,幾乎沒有完整的專案或者程式碼。

  平時LZ寫部落格的時候會寫不少程式碼,尤其是當初在寫設計模式系列的時候,程式碼更是堆積如山。不過可惜的是,由於這個系列有時候是LZ在家用自己的電腦寫的,有時候是在公司的時候用公司的電腦寫的,而且有時候是寫好了複製到部落格上就可能刪掉或者覆蓋了,於是就造成程式碼的分割和不完整,看起來零零碎碎的。

  想到這裡,LZ就更堅定了使用github的決心,其它不說,它至少可以當做自己的SVN倉庫。這樣的話,如果以後再寫程式碼,就不用擔心程式碼的零零碎碎,又或者是乾脆丟失找不到了,這些程式碼雖然不是什麼好東西,但對自己來說,其實也代表著當時的思考,有時候對自己還是很有用的。

基於Java的xml和object轉換工具

  其實Java當中,現在已經有了JAXB這個關於xml和object的轉換工具,當時LZ寫這個工具的時候,主要是因為JAXB不是JDK1.5自帶的,匯入的jar包相對較多也較大,功能雖然強大但卻不實用。因為我們公司的需求很簡單,只需要一個十分簡單的轉換就可以,於是當時LZ就自己寫了一個簡單的轉換工具,並稱之為simple-xml2object,首發於LZ的CSDN老部落格,這個小工具還給LZ賺了不少下載積分,呵呵。

  不過當時沒公開原始碼,很大的原因是因為,LZ覺得這個工具主要是提供簡單的轉換功能,如果單純從原始碼上來看的話,實在沒有什麼亮點。不過現在想法有點不一樣了,不管是好程式碼爛程式碼,只要是自己親手寫的,就有其儲存的價值。而且有了github,這種儲存十分方便,既然如此,為何不儲存呢?LZ想不出理由拒絕這種好處,當然了,如果有人能在github上提提意見,改善改善這個工具,那LZ更是求之不得了。

xxoo的誕生

  現在simple-xml2object在github上正式更名為xxoo,並採用apacheV2開源協議。說起這個名字的來歷,還是比較偶然的,昨晚LZ在github建立這個專案的時候,總覺得simple-xml2object這個名字太長了,因此LZ剛開始其實是想叫x2o或者o2x,但又仔細一看這兩個轉換的縮寫,這不就是兩個x和兩個o嗎,於是秉承著“簡單,好記”的原則,一個名為xxoo的轉換工具就這麼產生了。

  總而言之,言而總之,xxoo就是一個簡單的Java版的xml和object轉換的工具,並沒有任何高深的東西,因此LZ這裡就不再多說廢話了,直接上原始碼的相關地址和一些相關的簡單示例。

  1、SVN地址:https://github.com/xiaolongzuo/xxoo

  2、SSH地址:[email protected]:xiaolongzuo/xxoo.git

  以下是專案的簡單目錄,其中演示的示例LZ放在了test目錄當中,各位如果在SVN裡檢出原始碼,可以先看一下里面的示例。

  在test包當中,有一個類專門寫的是xxoo的示例程式碼,也算是xxoo的一般使用方式,它的具體程式碼如下。

package cn.zxl.xxoo.test;

import java.io.IOException;

import cn.zxl.xxoo.container.ConfigurableContainer;
import cn.zxl.xxoo.container.Container;
import cn.zxl.xxoo.processor.XmlBulider;
import cn.zxl.xxoo.processor.XmlBulider.Format;
import cn.zxl.xxoo.support.DefaultConfigurableContainer;

public class Transfer {

    public static void main(String[] args) throws IOException {
        //測試不可配置的容器
        useUnconfigurableContainer("E:/test1.xml");
        //測試可配置的容器
        useConfigurableContainer("E:/test2.xml");
    }
    
    public static void useUnconfigurableContainer(String path) throws IOException{
        //不可配置的容器
        Container container = new DefaultConfigurableContainer(Object.class);
        //向容器中新增一個複雜的Test物件
        container.add(Object.createObject());
        //獲取容器自動解析的xml內容
        String xml = container.getXml();
        //將xml內容存放在一個檔案中
        FileUtils.write(path, xml);
    }
    
    public static void useConfigurableContainer(String path) throws IOException{
        //可配置的容器,使用可配置的容器介面,推薦此種方式,比較靈活
        ConfigurableContainer configurableContainer = new DefaultConfigurableContainer(Object.class);
        XmlBulider xmlBulider = configurableContainer.getXmlBulider();
        //設定構建器的xml格式
        xmlBulider.setFormat(Format.TAB_AND_LINE);
        //改變容器中的構建器
        configurableContainer.setXmlBulider(xmlBulider);
        //向可配置容器新增複雜物件
        configurableContainer.add(Object.createObject());
        //獲取容器自動解析的xml內容,比較下不能配置的容器構建的xml格式和日期格式
        String configXml = configurableContainer.getXml(0);//等同於getXml()
        //將xml內容存放在一個檔案中
        FileUtils.write(path, configXml);
        
        /*             ---------------------------------               */
        
        //再將xml從test2.xml中讀取出來
        String readableConfigXml = FileUtils.read(path);
        //向容器中再加入一個xml
        configurableContainer.add(readableConfigXml);
        //獲取容器自動解析的物件
        //因為之前已經加入了一個物件,所以在加入xml之前,容器中已包含一對xml和object,此時索引為1
        //容器維護了兩個保持一致的陣列,分別存放xml和object,索引規則與陣列一致,從0開始
        Object test = configurableContainer.getObject(1);
        //列印容器大小
        System.out.println("size:" + configurableContainer.size());
        //列印解析的物件,列印的可能不太清楚
        //要想列印格式清晰,與我當初構建xml時相似,過程比較複雜,就不寫那麼詳細了,各位可以自己加斷點看物件內容
        System.out.println(test);
    }
    
}

  以下是一個xxoo工具生成的XML,算是一個簡單的演示吧,各位也可以自己試試。

<?xml version="1.0" encoding="UTF-8"?>
<Object>
    <stringParam>stringValue</stringParam>
    <dateParam>2013-11-09 03</dateParam>
    <testParam>
        <stringParam>stringValue</stringParam>
        <dateParam>2013-11-09 03</dateParam>
        <testParam>
            <stringParam>stringValue</stringParam>
            <dateParam>2013-11-09 03</dateParam>
            <testParam>
                <stringParam>stringValue</stringParam>
                <dateParam>2013-11-09 03</dateParam>
            </testParam>
            <testListParam>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                    <testListParam>
                        <Object>
                            <stringParam>stringValue</stringParam>
                            <dateParam>2013-11-09 03</dateParam>
                        </Object>
                        <Object>
                            <stringParam>stringValue</stringParam>
                            <dateParam>2013-11-09 03</dateParam>
                        </Object>
                    </testListParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
            </testListParam>
        </testParam>
    </testParam>
</Object>

  上述XML檔案基於下面這樣一個測試使用的Object類,程式碼如下。

public class Object implements Serializable{
    
    private static final long serialVersionUID = 1L;

    private String stringParam = "stringValue";
    
    @ADate(format = "yyyy-MM-dd hh")//日期註解,設定日期格式
    private Date dateParam = new Date();
    
    private Object testParam;
    
    private List<Object> testListParam;

    
}

  上面省略了get/set方法,其中的ADate是一個註解,可以定義日期在xml中的格式,這四個屬性都是無意義的屬性,各位不要糾結於這個,它們僅僅是為了測試。當然了,LZ個人的測試力度其實非常不足,不過基本的功能肯定是可以的,因為它可能已經被一小部分人在使用(CSDN下載次數75,囧),LZ當然就是其中一個。不過這其中難免會有一些隱藏的bug,這就看各位的火眼金睛夠不夠亮了,睜大你的17K氪金近視眼來挑LZ的bug吧,LZ將感激不盡。

用後感

  第一次使用github來保管程式碼,感覺還是十分不錯的,決定以後就用它了。最可惜的就是,當時那24個設計模式的程式碼沒有整理到github上面去,LZ悔之不及啊。如果哪位猿友也在為自己平時的程式碼儲存發愁,那就不要再猶豫了,趕緊踏上github的路途吧。

相關推薦

第一github第一開源專案——xxoo

引言   由於最近的工作寫程式碼比較少,這讓LZ產生了一絲危機感。於是便想找一個辦法可以沒事自己寫寫程式碼,自然而然就想到了github。接下來便是一陣搗鼓的過程,其實整個過程很快,主要過程就是註冊一

第一發博簡單的Java程序發送手機短信驗證

map() dht itl air created 導入 error cor images 最近在準備一個項目,想的登錄時候用手機驗證,就通過上網查閱了一下手機驗證的實現方法,原來超級簡單,下面將一步一步介紹。 1.去中國網建註冊一個賬號密碼,首次註冊送五條免費短信和3條免

第一瞭解GitHub在Windows下使用GitHub

心血來潮——看了一下關於版本管理工具Git 要使用GitHub(一個程式設計師的社群網站,基於Git用於託管軟體庫),個人覺得要先理解Git和GitHub。 這裡有兩個參考網站,可以做了解:  

第一github上推送自己的專案

第一步:註冊github賬號:(已有賬號的寶寶可以忽略此步驟)1.首先我們註冊一個自己的github賬號:github官網大丈夫行走江湖,行不更名,做不改姓,所以建議大家進行實名註冊郵箱建議大家採用qq郵箱方便以後獵頭能夠很方便的聯絡你.當我註冊成功後我們進行簡單的設定在這裡

第一使用GIT建立倉庫並提交專案程式碼

命令彙總: cd 在linux下是進入某一資料夾的操作。當你看到CD的時候,我是在找我的目錄,即要上傳程式碼的目錄。所以一直找到W_IMsg這個目錄下時,算是找到了自己要上傳的程式碼;(W_IMsg資料夾是專案程式碼所在的位置,對應於你電腦中的專案資料

第一使用github、git工具本地倉庫、遠程倉庫使用

git工具 控制系統 align 第一次 測試 控制 windows版本 .net out 一次使用git,記錄下使用過程。。。可能還有很多東西可能還沒理解,後期理解了再寫吧 git是什麽.,百度的回答: 一:Git是什麽? Git是目前世界上最先進的分布

第一劇本殺基本說明與模型抽取

本文分兩部分,第一部分是基本說明,第二部分是模型抽取。   一、基本說明     根據不同劇本,參與人數7+/-2人,跟Scrum的黃金人數一致。遊戲時長3~5小時,跟兩週迭代的計劃會時長一致。   每個角色都有自己的劇本,劇

poj 2104 <排序分塊區間第k大>/<第一用主席樹>2方法+整體二分

給一個序列,查詢區間第k大,用分塊來實現 首先將區間分為每塊block大小,也就有num=n/block塊,if(n%block==0)num++. 然後每次在定義每個塊其左右邊界的時候進行排序,那麼就得到一個每塊內排好序的塊。 查詢的時候因為是查詢區間第k大,那麼我們

第一沖刺求進步

收獲 大學 第一時間 體會 如何 改進 故事 人的 復習 一、小組第一次沖刺任務 以搭建好項目基礎為小目標,完善用戶需求 加強組員之間的溝通熟悉、互動交流 細化分工,明確任務 二、完成情況描述 【用戶故事】 作為一名長大學子,小黃特別希望能夠在手機上查到自己的

第一使用scrapy記下爬過的坑

name parse items all call response 實例 千萬 數據 第一次使用scrapy,記下爬過的坑 1,xpath語法,xpath語法用於選取需要的數據,用過bs4會比較好的理解它,類似於從一目錄樹查找, xpath(‘/html/body/div

第一寫隨筆記錄一下初衷

經歷 什麽 解決方法 問題 關於 喜歡 不能 一段 而且 經歷了一個思想鬥爭後,我想明白了,為什麽要寫博客。 之前學習時遇到了問題,百度後,在一篇博客幫助下快速的解決了。 於是我想,我不是不也可以通過記錄自己的經歷,來幫助他人?而且費曼學習法中,也提到了,教會他人是掌握技能

程式設計師的第一刪庫發同學群問怎麼恢復同學:趕緊跑路吧跑快點

不小心刪庫是一種怎樣的體驗? 刪過庫的人不可能坐著在這回答這個問題的,應該說,來回答問題的都是恢復回來的。或者想要回答這個的小夥伴可以親自去體驗,到時自然而然就懂了,是吧! 近日,又有一位程式設計師刪庫了。為什麼是又呢?因為網上太多的例子了,上面就是一個。 不過看這連天

java中無法找到主方法無法找到類web應用第一報500第二報404

在重灌機器後,原來的許多java工程在重新被新安裝的Eclipse讀取過程中出現了java.lang.NoNoClassDefFoundError的問題,檢視工程目錄中bin路徑下沒有生成對應的.class文件網上查閱了很多資料,大部分都指示classpath設定不對。但是Eclipse本身並不需要配置cla

串列埠485通訊第一傳送資料丟失第一位元組

描述如標題 思路:多次測試只在第一次通訊資料出現此種情況,查資料手冊發現如下: 在USART_DR暫存器中寫入了最後一個數據字後,在關閉USART模組之前或設定微控制器進入低功耗模式(詳見下圖)之前

騰訊第一種黃瓜又長又直還拿了獎

  作者 | 非主流 出品 | AI科技大本營   看這一籃水靈的黃瓜,賣相也好,為啥貼著騰訊的標籤?難道騰訊要開始賣瓜?   其實,騰訊不是賣瓜,而是親自種了一次瓜。   緣起:AI 溫室種黃瓜比賽  

第一發博《染色法與構造法在棋盤上的應用》的理解

看了太多大神的文章,被嚇的半句話也不敢亂說,然後看了很多很多人教育我說要學會寫部落格,而我一直都覺得自己弱成渣,分分鐘被秒成狗,然而我還是來了,因為儘管我弱,而你,卻無可奈何。   廢話不多說,第一次就不發別人發過的題解了,別人沒發過的不用說,我肯定不會做。。。  

安卓學習LESSON3:第一執行除錯瞭解KEYSTORE

建好第一個專案後,去嘗試執行除錯程式,遇到下述報錯。 其中提到了一個很重要的概念 KEYSTORE。 keystore的作用 有利於程序升級:當新版程式和舊版程式的數字證書相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數字證書不相同,則

輸入兩密碼第二第一不一致要求重新輸入的while迴圈

System.out.println("請輸入密碼:");// 輸入其他比如字串,且重新輸入   int mm1 = in.nextInt();   while (true) {    System.out.println("請再次確認密碼:");// 如果和第一次密碼輸入

C3P0資料來源連結池bug,mysql閒置一段時間後第一連結失敗第二連結成功的問題

mysql8個小時後,第一次連結失敗,第二次連結成功的問題mysql資料庫的預設連線時長為8個小時1.互動式連線:使用mysql客戶端進行資料庫連結   interactive_timeout2.非互動

Shiro 專案開發中第一使用到所以研究了一下這裡

專案使用的是Maven  首先要在pom.xml中引入shiro依賴 <!-- shiro 許可權 --> <dependency> <groupId>org.apache.shiro</groupId> &