上次推荐在《强势推荐ANT小蚂蚁》中提到使用ant可以完成同步svn代码、编译代码、打包代码、上传、部署的功能。这次再次将ant的功能提升一下,加入hudson持续集成引擎,将我们的程序化的工作更加的自动化完成。 Hudson 是一个可扩展的持续集成引擎,更多的信息可以下面网址。http://www.oschina.net/p/hudsonhttp://hudson-ci.org/ 配置使用步骤基本界面 我使用的Hudson的版本是2.2.1,已经有3.0.0RC的版本出来了,我求稳定,还是使用2.2.1,下载下来是个war,直接扔到tomcat下面就可以了。界面有中文,不过还没有实现全部的I18N,还有部分的英文,基本都认识的,不用担心。 基本界面如上,可以看到我有成功,也有失败的记录,我们的劳动总算是有记录了。建立构建工程 选择新建任务 我这里选择_自由风格_,根据项目实际情况选择。配置ant和任务调度 在任务配置界面中,因为我在ant脚本中已经写好了svn的信息,所以在这里就不配置版本管理了,只配置ant和任务调度两个。 在ant的配置中,只要你把ant脚本文件build.xml放在_C:.hudsonjobsTEST_下面,hudson就可以执行ant脚本了,当前在target中要配置了,在target中每行可以写一个执行的目标。 在_Build Triggers_中,我选择_Build periodically_,表示定时执行,需要写调度表达式。> ##### 调度表达式资料:Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年,*代表所有。 例如:0 9 * * * 表示在任何年任何月的任何天的9点的0分4. 构建工程 可以可以选择_立刻构建_或者等定时任务就可以开始构建工程了,在Hudson可以查看执行的日志和最后的结果。看到_BUILD SUCCESSFUL_就说明,你成功了,恭喜!Hudson下载地址
今天遇到个比较搞的事情,我们接口层的时间格式采用时间戳的格式来进行定义的。在各个语言上面应该是比较通用的吧! 我们讨论的焦点是c#不好处理,要把格式改成yyyy-mm-dd hh:mm:ss的格式,就这样产生了分歧。 我不做C#开发,也承认C#作为MS的产品,可能C#对于时间戳会没做很好的处理,可总有处理的办法吧!呀!这个问题纠结的啊! 为了测试有办法处理,给电脑装了VS2010,测试之后,才发现,这么容易处理! 发代码给大家瞧瞧,没学过代码的也能明白,啥叫个简单。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { Console.WriteLine("时间戳转换为本地时间"); Console.WriteLine("1347872069"+"转换为本地时间:"); long l = 1347872069; // 本地时间为:2012/9/17 8:54:29 Console.WriteLine(FROM_UNIXTIME(l)); Console.WriteLine("================="); Console.WriteLine("本地时间转换为时间戳"); DateTime dt = DateTime.Now;//取系统当前时间 Console.WriteLine("系统当前时间:" + dt.ToLocalTime()); Console.WriteLine(UNIX_TIMESTAMP(dt)); Console.Read(); } //时间戳转换为本地时间 public static DateTime FROM_UNIXTIME(long timeStamp) { return DateTime.Parse("1970-01-01 00:00:00").AddSeconds(timeStamp); } //本地时间转换为时间戳 public static long UNIX_TIMESTAMP(DateTime dateTime) { return (dateTime.Ticks - DateTime.Parse("1970-01-01 00:00:00").Ticks) / 10000000; } }} 提供一个时间戳转换工具的网址,不相信,可以试试。http://shiningray.cn/toys/unix-timestamp
一大清早就听见下面垃圾车队出发的声音,吵得要命,再接着卫生管理者的大骂声,震耳欲聋啊!实在是睡不下去了!呵呵!最近把主系统改用linux了,使用的是linux deepin的版本,的确就像是linux deepin说的那样,免除新手痛苦、节约老手时间!在很多操作上面都已经很简单方便了!作为一个码农和一个软件爱好者,不得不承认,linux下面有很多软件是比不上windows的,我的win系统是win8预览版,装啦100多个软件,不包含游戏,在linux的可选就相当的少了!针对自己必需的软件,在linux也足够我使用了.娱乐办公类QQ:webqq或者采用wineqq2012音乐:本地使用深度音乐,深度音乐相当的给力,在线的选择就很多了,我主要使用的是虾米的air版本.下载:使用wine迅雷,或者浏览器下载,命令行的wget也是很不错的选择,wget -c还支持断点续传的.浏览器:主要是chrome,还有火狐也在使用.办公:libreoffice或者在线的,等待wps4linux.编辑器:自带的gnote,推荐用sublime text2,跨平台,我在win下面的主要编辑器…开发工具类:eclipse:自己装插件,可以定制自己使用各种开发工具,java.php.web等等等!tomcat:本身就跨平台mysql:同上uml:eclipse插件git:本来就是为linux服务的.特别一提的是,我喜欢用ms project去整理一些事情,在linux还有grant project可以替代的.个人用的笔记软件主要是wiz,wiz的linux版本太简陋,可以用wine来使用windows的版本.还有好多,不说了,要上班去了!来公司了,补充下自己使用的软件。http://pan.baidu.com/netdisk/singlepublic?fid=874434_2892209213
之前就知道ANT这个小蚂蚁,一直没有用过,这两天,下了点功夫,写了一个ANT的脚本。功能还行,可以完成同步svn代码、编译代码、打包代码、上传、部署的功能。直接上干货,看代码。[code]#JDK homejdk.home=/opt/Java/jdk1.6.0_33#webapp namewebapp.name=pmeappproject.name=pmeapp#svnsvn.url=http://127.0.0.1:9344/svn/pmeapp/trunksvn.uname=dapengsvn.pwd=dapengpwd#warwar.exclude=war.exclude.classes=#ftpftp.server=127.0.0.1ftp.password=dapengpwdftp.userid=dapengftp.path=/opt/ftp/#sshssh.host=127.0.0.1ssh.path=/opt/tomcat6/webappsssh.pwd=dapengpwdssh.uname=dapeng#sshssh.path.webapp=/opt/tomcat6/webappsssh.server.bin=/opt/tomcat6/binssh.cmd.sshClean=rm -rf /opt/tomcat6/webapps/${webapp.name}/ssh.server.start=/opt/tomcat6/bin/startup.shssh.server.stop=/opt/tomcat6/bin/shutdown.sh[/code]另外一个是关键中的核心[sourcecode]<project basedir=’.’ default=’usage’ name=’${project.name}’> <!– =================================================================== –> <!– 下句是import进ant属性配置文件,properties文件里存放基本的配置变量. –> <!– 该变量可以在build.xml中直接引用. –> <!– =================================================================== –> <property file=’ant.properties’/> <!– =================================================================== –> <!– 以下的几个属性是系统自带的,初始了tstamp之后,它们就有值了 –> <!– ${DSTAMP} ${TSTAMP} ${TODAY} –> <tstamp/> <property name=’war.name’ value=’${webapp.name}’ /> <!– =================================================================== –> <!– Init –> <!– =================================================================== –> <target name=’init’> <echo message=’————————————-‘/> <echo message=’start ant build ${project.name} – ${DSTAMP}${TSTAMP}’/> <property name=’debug’ value=’off’/> <property name=’optimize’ value=’on’/> <property name=’deprecation’ value=’on’/> <!– java源文件路径 –> <property name=’src.dir’ value=’${basedir}/src’/> <!– jar包路径 –> <property name=’lib.dir’ value=’${basedir}/WebRoot/WEB-INF/lib’/> <!– webapp路径 –> <property name=’webapp.dir’ value=’${basedir}/WebRoot’/> <!– 准备源文件路径 –> <property name=’build.src’ value=’${basedir}/AntBuild/build’/> <!– 编译源文件路径 –> <property name=’build.dest’ value=’${basedir}/AntBuild/bin’/> <!– 准备webapp文件路径 –> <property name=’buildwar.dest’ value=’${basedir}/AntBuild/warsrc’/> <!– 打包war文件路径 –> <property name=’war.dest’ value=’${basedir}/AntBuild/war’/> <!– jre lib路径 –> <property name=’jre.lib’ value=’${jdk.home}/jre/lib’/> <!– 引用svn task文件,使用svn任务可以使用–> <typedef resource=’org/tigris/subversion/svnant/svnantlib.xml’ /> <!– 设置svn相关属性 –> <svnSetting id=’svn.setting’ svnkit=’true’ username=’${svn.uname}’ password=’${svn.pwd}’ javahl=’false’ /> <!– classpath –> <path id=’classpath’> <!–web.lib–> <fileset dir=’e:/lib’> <include name=’/*.jar’/> </fileset> <fileset dir=’${jre.lib}’> <include name=’/.jar’/> </fileset> <fileset dir=’${lib.dir}’>…
使用mysql时,发生的错误 Table is marked as crashed and should be repaired。解决办法:用“REPAIR TABLE tablename;”命令修复。简单好用!还有其他办法,就不多说了。原因:有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说 法。还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能 导致MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。来一曲古风版的最炫民族风,民族乐器演奏出来果然不一般啊!
作为一个通用的框架,不仅仅需要最小可用,还需要一些完整的功能,这篇文章说了一些常用的通用功能,我建议再补充一些。a、权限控制 作为系统,就有人去用,有人的地方就需要进行控制,能用什么,该用什么,都要进行管理,这就是权限控制。权限是个很复杂的东西,场景不一样,权限控制也就不一样,我一直赞成使用的是RBAC,使用资源、角色、用户做最小角色控制,以后需要其他功能,RBAC也容易进行扩展。b、日志记录安全是现在系统必须注意的问题,而系统很作的操作,都很敏感,你做了,我就得记住。其他的功能,看看下面的文章!公司的JAVA框架应具备的通用功能以前在学校的时候自己以为是不是每个做JAVA开发的公司每次做项目的时候都要搭建一个SSH框架呢,工作之后才发现每个公司都有自己的一套框架,要不是在SSH基础上,要不是在SSI基础上进行了符合自己公司需求的封装,并且随着自己公司的框架被应用到各个实际系统的过程中,这个框架会越来越成熟,会使该公司的开发效率越来越高。 根据笔者接触过的几个公司的框架,笔者发现要想实现高效的开发,每个公司的Java框架应该具备如下的特点:1.具有灵活的分页功能。 分页功能是每个项目中必须要实现的功能,而恰恰这个功能是比较费时费力的,如果在框架中实现这一功能,将在每个项目中大大减少分页的重复性工作。2.可以方便的实现文件的上传与下载、数据的导入和导出的功能。 文件的上传于下载、数据的导入和导出在大部门项目中也会遇到,但是这两个功能可能会因为项目的不同导致实现上有一点区别,我们框架中要做的就是应该抽出其中共有的东西,定义为抽象的东西,以便不同的项目、不同的需求都能很容易的实现该功能。3.方便的事务管理功能。 事务管理一般来说都定义在业务逻辑层。我们框架中应该实现对业务逻辑对象事务的简单配置甚至是零配置。笔者接触过的两个框架中,一个需要在配置完一个业务逻辑对象时,在事务管理的配置文件中加上一句简单的配置即可,另一个是框架中实现了几个基本的业务逻辑对象,并对这几个对象实现了事务管理的配置,开发的时候定义的业务逻辑对象都是继承自这几个基本对象,也就省去了事务管理的配置。4.具有异常处理框架。 基本上每个项目的异常处理都应该可以使用公司的框架定义的异常处理框架,并不会因为项目的不同而要求的异常处理也不一样。5.具有自己的一套页面组件。 项目开发都是团队的开发,要想保证每个开发人员的界面风格统一,最好的办法就是定义一套公司自己的页面组建。这样既能保证开发效率,也能做到界面的统一。freemark就是不错的选择,其支持自定义宏,公司框架中可以定义一套自己的页面组建宏,供开发人员调用即可。6.具有数据校验框架。 每个项目在数据校验时都可能会用到大量的正则表达式,那么在公司的框架中将这些正则表达式封装起来,提供统一的调用接口将是不错的选择。7.简单的实现菜单的配置。 一个好的框架应该提供对菜单、二级菜单等的简单配置、管理。还是上文提到的两个框架,一个是通过XML配置文件实现了对系统中一级菜单、二级菜单、三级菜单的管理,而另个框架要实现相同的需求却要在数据库中进行繁琐的配置,显然第一个框架的实现方案更可取、更高效。原文网址:http://hp.dewen.org/?p=974