第一次玩github,第一个开源小项目——xxoo

发布时间:2013-11-09 17:06:00作者:左潇龙阅读(4280 )评论(29)

    引言

     

      由于最近的工作写代码比较少,这让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地址:git@github.com: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的路途吧。


    版权声明:本文版权归作者(左潇龙)所有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    2
    精彩
    0
    感动
    2
    搞笑
    0
    开心
    0
    愤怒
    0
    无聊
    1
    灌水
    0
    惊讶

上一篇:杂谈---回家之路

#1楼     时间:2013-11-09 17:13:00      来源:lwgarmstrong
我是先奔着这个文章题目点进来的,嘿嘿

写的不错,赞LZ
#2楼     时间:2013-11-09 17:23:00      来源:左潇龙
@ 李文刚
多谢施主来捧场,贫僧有礼了。
#3楼     时间:2013-11-09 17:30:00      来源:路人.乙
#4楼     时间:2013-11-09 17:31:00      来源:路人.乙
#5楼     时间:2013-11-09 17:37:00      来源:左潇龙
@ 路人.乙
施主发的是什么?难道是贫僧的浏览器看不到吗。阿弥陀佛。
#6楼     时间:2013-11-09 17:46:00      来源:SAGA.
求教龙哥 GitHub的使用方法 之前捣鼓过 不太会用
#7楼     时间:2013-11-09 17:49:00      来源:左潇龙
@ Jason Ren
施主这名字,十分眼熟,是群里的猿友吧?
#8楼     时间:2013-11-09 17:51:00      来源:SAGA.
嗯 是的 紧追龙哥的脚步~ 搞GIS的伤不起
#9楼     时间:2013-11-09 18:05:00      来源:专职测试人员
<script>alert(document.cookie)</script>
#10楼     时间:2013-11-09 19:00:00      来源:互联网Fans
怒赞!
#11楼     时间:2013-11-09 19:24:00      来源:左潇龙
@ 专职测试人员
施主这是想在评论里嵌入js代码?专职测试人员,不会是微服私访的博客园工作人员吧。
#12楼     时间:2013-11-09 19:24:00      来源:左潇龙
@ 互联网Fans
多谢施主的赞赏,贫僧有礼了。
#13楼     时间:2013-11-09 23:00:00      来源:xchsp
第一次玩github,第一个开源小项目——xxoo,谢谢分享。
#14楼     时间:2013-11-09 23:51:00      来源:Alexia(minmin)
我早就注册了github,但一直没用,其实自己也有一些项目,但是自己做的,没写什么文档说明,感觉传上去有点不负责任,但github的确十分值得使用,追随LZ
#15楼     时间:2013-11-10 00:02:00      来源:ffedu
我是先奔着这个文章题目点进来的
#16楼     时间:2013-11-10 08:08:00      来源:孤狼晖
github怎么和SVN混到一起了。。
#17楼     时间:2013-11-10 10:27:00      来源:夜の魔王
建议楼主名字还是改一下,xxoo不登大雅之堂,人家公司打算用你的,老总听了感觉很不靠谱,更像是业余玩家选手做的东西。仅代表个人观点,不喜勿喷。
#18楼     时间:2013-11-10 11:02:00      来源:左潇龙
@ 孤狼晖
这个,可以有吧,贫僧用着SVN管理代码还挺好。
#19楼     时间:2013-11-10 11:05:00      来源:左潇龙
@ 夜の魔王
哈哈,多谢提醒。不过这本来就是一个小工具而已,就不用跟老板汇报了吧。
#20楼     时间:2013-11-10 11:26:00      来源:左潇龙
@ Alexia(minmin)
@xchsp
多谢两位施主的支持,贫僧有礼了。
#21楼     时间:2013-11-11 09:43:00      来源:会长
为什么你们都不支持国内的呢,我在咱国内的git服务上创建了2个:http://git.oschina.net/
#22楼     时间:2013-11-11 09:46:00      来源:会长
#23楼     时间:2013-11-11 13:01:00      来源:孤狼晖
@ 左潇龙
github上用svn管理代码,让人不太好接受的设定额,为什么不用git呢。。
#24楼     时间:2013-11-11 13:38:00      来源:Never_Land
一直关注这楼主的动态的,写的不错的啊
#25楼     时间:2013-11-12 12:51:00      来源:雷厉*风行
LZ其实没必要解释这个项目的名字是咋来的~
#26楼     时间:2013-11-13 14:48:00      来源:阿甘的皮箱
感谢分享。我是使用git工具的。
#27楼     时间:2013-11-16 21:40:00      来源:xchsp
@ 会长
oschina的git,还不够成熟,优秀的源码比较少。需要国内重量级的源码项目入住。
#28楼     时间:2014-03-03 08:59:00      来源:Never_Land
我也用这个,可惜的是没放过源码在上面。。。o(︶︿︶)o 唉
#29楼     时间:2014-07-28 10:33:00      来源:songbai
@ lwgarmstrong
我哪个去。。。
发表评论

站内搜索

最新评论