这个是在生成Javadoc的时候发现的,google了下,不少问的,第一个是说这个是个bug,其实以前也google过,看到那个说是bug而且优先级是4-Low,状态也不是close就没有去理会这个问题,这次又搜索了下,耐着性子看了几个帖子,发现这个不是bug,而是有解决方案,因为我是在ant脚本里面加的,解决方案就是在javadoc的task指定classpath或者classpathref,只要和你编译那些类使用一样的classpath或者classpathref就行。
这个是在生成Javadoc的时候发现的,google了下,不少问的,第一个是说这个是个bug,其实以前也google过,看到那个说是bug而且优先级是4-Low,状态也不是close就没有去理会这个问题,这次又搜索了下,耐着性子看了几个帖子,发现这个不是bug,而是有解决方案,因为我是在ant脚本里面加的,解决方案就是在javadoc的task指定classpath或者classpathref,只要和你编译那些类使用一样的classpath或者classpathref就行。
一个很简单的问题,但是google了下竟然发现没有太多的答案,仔细看了下Ant的文档,自己摸索出来了方法:
<ftp action="del" server="${remote.host}" port="${ftp.port}" remotedir="${remote.dir}" userid="${user}" password="${password}">
<fileset>
<include name="test/**/*"/>
</fileset>
</ftp>
<ftp action="rmdir" server="${remote.host}" port="${ftp.port}" remotedir="${remote.dir}" userid="${user}" password="${password}">
<fileset>
<include name="test/**/*"/>
<include name="test"/>
</fileset>
</ftp>
好像必须得这样才行,第一步先得把文件全部删除,使用的action是del,然后删除全部的子目录,使用的action是rmdir,删除目录的时候把要删除的那个目录连带也删除。
今天继续写build脚本,加JUnit的target,但是我开始用的是Ant1.6.2,但是JUnit用的是4.1,发现编译正常,但是运行的时候出错,报的错是ClassNotFoundException,google了下,发现很多人有类似的问题,但是没有多少好的答案,最后在同事的一起努力下搞定,有两种情况:
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(TestXxxx.class);
}
还有就是注意ClassPath的定义:
<path id="classpath">
<fileset dir="${basedir}">
<include name="lib/**/*.jar"/>
</fileset>
<fileset dir="${web.dir}">
<include name="WEB-INF/lib/**/*.jar"/>
</fileset>
<pathelement path="${class.dir}"/>
</path>
开始的时候,那个pathelement部分也是和其他的一样使用的fileset,不知道为什么必须使用pathelement才好使。
今天总算是把工程在Eclipse下配置好了,而且没有任何错误,从Oneal那里拷贝来的工程文件一堆错误,我这个人又是那种容不得满眼全是错误的人,花了一个小时搞定这个问题,开始熟悉项目,结果是:真是太复杂了!
系统的大部分都是通过Web Service调用的,包括和其他的系统集成以及和工作流引擎集成,而Web Service又是通过Session Bean调用DAO,DAO再调用hibernate,而Session Bean用到了版本2和版本3(也就是同时使用了EJB2和EJB3),因此工程有N个EJB的模块,源代码也分布在几十个大大小小的目录中,同时Web工程也是N个模块,另外还使用到了LDAP完成用户登陆,Eclipse工程目前只是用于远程调试和编译,最主要是写代码,完全失去了IDE最重要的功能。(这个是目前的理解,不排除遗漏的东西以及误解)
如果发现问题或者要修改Bug,抱歉,不能Hot Deploy,必须修改代码后使用Ant编译并发布好,然后重启Jboss,Ant一般情况下至少需要5分钟,即使是修改一个properties也要2分钟才能跑完,然后重启Jboss需要8分钟(我的是新安装的机器,比较快,其他的人的需要10分钟左右),天啊,开发效率怎么可能高啊!
不过这也正好给我一个机会,上一家公司的情况也是类似,大家修改什么也是先Ant再重启Jboss,一般也至少要10分钟,后来我就在Eclipse下配置了可以Hot Deploy的工程,如果只是修改代码内容,不新增EJB类或者方法就不用Ant编译了,修改了代码保存下就更新了,开发速度提高很多,我这个月的任务就是在这个公司也把这个工程搞出来,这样弄完以后对项目的熟悉程度也会上一个台阶。
我们的自动测试会生成报告,原来的实现比较简单,就是删除32天前的那个目录,问题是可能某些天的build会失败,那么task不会被调用,这样可能保存的历史记录大于31了,偏离我们的目的了。查看了下ant的手册,发现有一个selector可以用,得到如下的内容:
<target name="backup-report">
<tstamp>
<format locale="en" property="deletedDir" pattern="MM/dd/yyyy hh:mm aa" offset="-32" />
</tstamp>
<tstamp>
<format property="thisDir" pattern="yyyy-MM-dd" />
</tstamp>
<mkdir dir="${reports-dir}/${thisDir}"/>
<copy todir="${reports-dir}/${thisDir}">
<fileset dir="${report-dir}">
<include name="**/*"/>
</fileset>
</copy>
<delete>
<fileset dir="${reports-dir}" includes="*">
<date datetime="${deletedDir}" when="before"/>
</fileset>
</delete>
</target>
问题是这个似乎不能删除目录,只有1.6.2以后才支持删除目录。
最终一个简单的方法就是在最开始就删除32天前的目录,这样就不会有太老的记录保留下来了。
© 2025 解惑
本主题由Anders Noren提供 — 向上 ↑