??xml version="1.0" encoding="utf-8" standalone="yes"?>在线亚洲成人,99re这里都是精品,成人在线观看免费视频http://www.aygfsteel.com/surffish/非学无以q才Q非志无以成学!zh-cnSat, 17 May 2025 09:21:22 GMTSat, 17 May 2025 09:21:22 GMT60职场法则http://www.aygfsteel.com/surffish/archive/2007/11/27/163442.htmlsurffishsurffishTue, 27 Nov 2007 06:18:00 GMThttp://www.aygfsteel.com/surffish/archive/2007/11/27/163442.htmlhttp://www.aygfsteel.com/surffish/comments/163442.htmlhttp://www.aygfsteel.com/surffish/archive/2007/11/27/163442.html#Feedback0http://www.aygfsteel.com/surffish/comments/commentRss/163442.htmlhttp://www.aygfsteel.com/surffish/services/trackbacks/163442.html
  国著名历史学家诺斯古d-帕金通过长期调查研究Q写了一本名叫《帕金森定律》的书,他在书中阐述了机构h员膨胀的原因及后果Q一个不U职的官员,可能有三条出路。第一是申请退职,把位子让l能q的人;W二是让一位能q的人来协助自己工作Q第三是ȝ两个水^比自己更低的人当助手?br />
  q第一条\是万万走不得的,因ؓ(f)那样?x)p多权力;W二条\也不能走Q因为那个能q的Z(x)成ؓ(f)自己的对手;看来只有W三条\最适宜。于是,两个q_的助手分担了他的工作Q他自己则高高在上发h令。两个助手既无能Q也׃行下效,再ؓ(f)自己找两个无能的助手。如此类推,Ş成了一个机构臃ѝh于事、相互扯皮、效率低下的领导体系?br />
  苛希U_?br />
  西方理学中有一条著名的苛希U_律:(x)如果实际理人员比最佳h数多两倍,工作旉p多两倍,工作成本p多四倍;如果实际理人员比最佳h数多三倍,工作旉p多三倍,工作成本p多六倍?br />
  苛希U_律告诉我们,在管理上q不是h多力量大Q管理h员越多,工作效率未必׃(x)高。苛希纳定律要求我们Q要认真研究q找C个最佳h敎ͼ以最大限度地减少工作旉Q降低工作成本?br />
  马蝇效应

  林肯年时和他的兄弟在肯塔基老家的一个农场里犁玉c_Q林肯吆马,他兄弟扶犁,而那匚w很懒Q慢慢腾腾,走走停停。可是有一D|间马走得飞快。林肯感到奇怪,C地头Q他发现有一只很大的马蝇叮在马n上,他就把马蝇打落了。看到马蝇被打落了,他兄弟就抱怨说Q?#8220;哎呀Q你Z么要打掉它,正是那家伙马跑h的嘛Q?#8221;

  没有马蝇叮咬Q马慢慢腾腾Q走走停停;有马蝇叮咬,马不敢怠慢Q跑得飞快。这是马蝇效应。马蝇效应给我们的启C是Q一个h只有被叮着咬着Q他才不敢松懈,才会(x)努力拼搏Q不断进步?br />
  “南风”法则

  “南风”法则也称“温暖”法则Q源于法国作家拉丹写过的一则寓aQ北风和南风比威力,看谁能把行hw上的大脱掉。北风首先来一个冷风凛冽寒冷刺骨,l果行hZ抵M北风的R袭,便把大裹得紧紧的。南风则徐徐吹动Q顿旉和日丽,行h因ؓ(f)觉得春暖上nQ始而解开U扣Q而脱掉大,南风获得了胜利?br />
  q则寓言形象地说明了一个道理:(x)温暖胜于严寒。领D在理中运?#8220;南风”法则Q就是要重和关心下属,以下属ؓ(f)本,多点“人情?#8221;Q尽力解决下属日常生zM的实际困难,使下属真正感受到领导者给予的温暖Q从而激发出工作的积极性?br />
  酒与污水定律

  酒与污水定律是指Q如果把一匙酒倒进一桶污水中Q你得到的是一桶污_如果把一匙污水倒进一桉中,你得到的q是一桶污水?br />
  在Q何组l里Q都存在几个隑ּ的h物,他们存在的目的似乎就是ؓ(f)了把事情搞糟。最p糕的是Q他们像果箱里的烂苹果一P如果你不及时处理Q它?x)迅速传染,把果里其他的苹果也弄烂?#8220;烂苹?#8221;的可怕之处在于它那惊人的破坏力。一个正直能q的入一个؜q部门可能被吞没,而一个无h才者能很快一个高效的部门变成一盘散沙。一个能工y匠花Ҏ(gu)日精心制作的陶瓷品,一头驴子一U钟p它毁坏掉?

surffish 2007-11-27 14:18 发表评论
]]>
团队理101?/title><link>http://www.aygfsteel.com/surffish/archive/2006/09/21/70968.html</link><dc:creator>surffish</dc:creator><author>surffish</author><pubDate>Thu, 21 Sep 2006 00:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/surffish/archive/2006/09/21/70968.html</guid><wfw:comment>http://www.aygfsteel.com/surffish/comments/70968.html</wfw:comment><comments>http://www.aygfsteel.com/surffish/archive/2006/09/21/70968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/surffish/comments/commentRss/70968.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/surffish/services/trackbacks/70968.html</trackback:ping><description><![CDATA[不论你是单一团队的领D还是多个团队的理人,团队理工作都是你职权范围内一个重要的l成部分。在今日Q集多重技术于一w的工作Ҏ(gu)已逐渐取代阶层式的、缺乏弹性的传统工作体制Q团队合作因而很快就成ؓ(f)了一U很受欢q的工作方式。对于每一位参与团队管理工作的言Q《团队管理》是一本不可或~的重要ȝ。它向你提供了达成计划所需的技巧、徏立团队成员间的信仅R激发团队最大的潜能{方面的知识Qؓ(f)你能专业化地理好你的团队创造了有利条g。另外,全书q散布了101条简明提C,Z提供重要而实用的讯息。后半部分有个自我评估练?fn),使你能正地评估自己的领D力,q对自q不加以改进? <p class="main"><strong>了解团队q作</strong></p><p class="main">  <strong>团队合作是所有成功管理的根基。无Z是新手还是资q理hQ对你而言Q管理好团队都是重要且具Ȁ励性的挑战?/strong></p><p class="main">1.切记Q每位成员都能ؓ(f)团队作出一些A(ch)献?/p><p class="main">2.谨慎地设定团队目标,且认真严肃地对待它们?/p><p class="main">3.切记成员间要彼此扶持?/p><p class="main">4.长E目标打散成许多短程计划?/p><p class="main">5.为每个计划设定明的期限?/p><p class="main">6.早军_何种形态的团队适合你的目标?/p><p class="main">7.努力与其它团队的成员建立强有力的紧密关系?/p><p class="main">8.找一位可提升团队工作士气的重量人物?/p><p class="main">9.时时提醒团队成员Q他们都是团队的一份子?/p><p class="main">10.团队的注意力集中在固定可衡量的目标上?/p><p class="main">11.利用友谊的强大力量强化团队?/p><p class="main">12.选择领导者时要把握用人唯才原则?/p><p class="main">13.领导者需具备强烈的团队命感?/p><p class="main">14.奖赏优异的表玎ͼ但绝不姑息错误?/p><p class="main">15.C每位团队成员看事情的角度都不一栗?/p><p class="main">16.征召团队成员Ӟ应注重他们的成长潜能?/p><p class="main">17.密切注意团队成员~少的相关经验?/p><p class="main">18.应不适Q的成员退出团队?/p><p class="main">19.扑ֈ能将人际关系处理得很好的人,q培M们?/p><p class="main"><strong>讄一支团?/strong></p><p class="main"><strong>  成立一支团队是领导者的主要工作。确保你的团队有清楚明确的目的和_达成目标的资源。要以开攑֒公正无私的态度对待团队成员?/strong></p><p class="main">20.讑֮h战性的目标L据限期来考量是否合理?/p><p class="main">21.讑֮目标Ӟ考量个别成员的工作目标?/p><p class="main">22.计划的失败危及整体计划的成功?/p><p class="main">23.坚持得到信息技术支持,它能Z提供实需要的东西?/p><p class="main">24.对待团队外的N要如同对待团队成员一般?/p><p class="main">25.让团队的赞助者随时知道工作进展情形?/p><p class="main">26.除非你确定没有h能够胜QQ否则应避免“事必躬亜y?/p><p class="main">27.不要委托不必要的工作Q最好将其去除掉?/p><p class="main">28.赋予团队自己作决{的权力?/p><p class="main">29.鼓励团队成员正面U极的A(ch)献?/p><p class="main">30.肯定、宣扬和庆祝团队每次的成功?/p><p class="main">31.扑ֈ易于让成员及团队了解每日工作q度的展现方式?/p><p class="main">32.鼓励成员之间建立工作上的伙伴关系?/p><p class="main">33.鼓励天生h领导才能的hQƈ引导和培M们的领导技巧?/p><p class="main">34.l对不能没有解释驳回团队的意见Q与此相反,解释要坦白,理由要充分?/p><p class="main">35.定团队和客L(fng)怿持联pR?/p><p class="main">36.以自信肯定的态度让团队知道谁当家Q但要预防予人来势v汹的感觉?/p><p class="main">37.惛_法给新团队留下一个实时的好印象,但切忌操之过急?/p><p class="main">38.倘若你要求别人的Q抱持的心态不能只是欢q就行了Q也要依循徏议有所行动?/p><p class="main"><strong>提升团队效率</strong></p><p class="main"><strong>  团队要达到应有的效率Q唯一的条件是每个成员都要学会(x)集中力量。你必须了解团队的能力,以确保团队的成功?/strong></p><p class="main">39.协助团队扑ևҎ(gu)以改变有Q务推展的团体行ؓ(f)?/p><p class="main">40.扑և可徏设性地利用冲突的方法?/p><p class="main">41.C要在工作中穿插安排娱乐调剂n心──q是每个人应得的利?/p><p class="main">42.若有计划出错Q一定要作全面性、公开化的分析?/p><p class="main">43.如果你希望团队成员有问题时能毫不犹疑地找你谈Q就要实施“开门政{”?/p><p class="main">44.要求提出问题的h解决问题?/p><p class="main">45.安排正式的和非正式的?x)面Q讨论团队的工作q展?/p><p class="main">46.使用不带感情只问事实的态度Q是化解U争的最好方法?/p><p class="main">47.保持团队成员间的熟稔Q以易于沟通?/p><p class="main">48.讄交谊场所Q让团队成员可作非正式的面交谈?/p><p class="main">49.鼓励同事间自q沟通活动?/p><p class="main">50.建立最适合的通讯U技pȝQƈl常更新?/p><p class="main">51.实施?x)议d轮流Ӟ让每个h都有Z(x)L?x)议?/p><p class="main">52.可能多地授权给团队成员?/p><p class="main">53.事先于会(x)前发E,预留旉l与?x)者准备?/p><p class="main">54.培养所有对团队有益的关pR?/p><p class="main">55.努力保持团队内外关系的均衡与q稳?/p><p class="main">56.定所有相关h士都能听到、了解好消息?/p><p class="main">57.倘有ȝ在团队关pM发酵蕴酿Q要快处理?/p><p class="main">58.安排团队与机构的其它部门作社交联谊?/p><p class="main">59.扑և你与“大佬”保持联pȝ最佳通讯U技?/p><p class="main">60.要对你在团队或办公室外接触过的重要h士作联系记录?/p><p class="main">61.谨慎分派角色以避免Q务重复?/p><p class="main">62.扑֯中的_֍Q且l不在公开场合批评M?/p><p class="main">63.一定要找有l验的h解决问题?/p><p class="main">64.分析团队成员每个人所扮演的角艌Ӏ?/p><p class="main">65.脑力Ȁ发出的意见,q不采用,亦不得轻视。否则,?x)打Mh的积极性,创意的流动也?x)因此停止?/p><p class="main">66.公^对待每个成员才能避免怨恨?/p><p class="main">67.定团队成员真正有错之前Q都视他们没有错?/p><p class="main">68.告诉同事他们做得很好Q这有助于激励团队士气?/p><p class="main">69.重每一位成员,包括那些l你刉麻烦的人?/p><p class="main">70.避免和团队成员有直接的冲H?/p><p class="main">71.C采用对事不对人的处事态度?/p><p class="main">72.定整个团队都能够从解决问题中学?fn)经验?/p><p class="main">73.先选择完成一些规模大的、可快速达成及有成感的Q务,以激励成员再接再励?/p><p class="main">74.信团队成员皆了解团队中的其它角艌Ӏ?/p><p class="main">75.计算品质的成本之前,先计失败的成本?/p><p class="main">76.针对每笔预算及每团队行动计划,讑֮重大的改q目标?/p><p class="main"><strong>为未来努?/strong></p><p class="main"><strong>为团队设定新的、更高的挑战目标是团队工作中最令h兴奋的事情之一。可q用一些适当的技巧,推动团队向更大、更好的目标前进?/strong></p><p class="main">77.告知团队每位成员Q在讑֮的标准中有哪些评量的目?/p><p class="main">78.定所有改善措施及新订目标都持l进行着?/p><p class="main">79.召开讨会(x)议前传阅所有相兌料及资料?/p><p class="main">80.开讨会(x)时一定要避讳nd?/p><p class="main">81.C关系?x)随旉改变?/p><p class="main">82.避开低估或忽视坏消息的陷井?/p><p class="main">83.每天l束时自问团队今天是否又向前跨出了一步?/p><p class="main">84.們֐受训者关于训l课E的回馈意见?/p><p class="main">85.扑ֈ有最好设备的最佌l场所?/p><p class="main">86.聘请N讄公司内部的训l课E?/p><p class="main">87.利用Ud训练时的用餐旉作非正式的计划?/p><p class="main">88.每位团队成员都必d与设定目标的工作Q以促进团队合作及达成共识?/p><p class="main">89.允许团队自行军_达成目标的方法,可激励团队努力工作?/p><p class="main">90.定目标能激发团队的斗志Q如果不行,h变目标?/p><p class="main">91.一支没有“严峠Z目标的团队Q工作表现将不如接受q此c考验的团队?/p><p class="main">92.讑֮奖励标准Ӟ允许团队成员有发a权?/p><p class="main">93.避免使用名次表,因ؓ(f)落后的团队成员将?x)感到自心受创?/p><p class="main">94.指定某h监视市场上每一个相兛_化?/p><p class="main">95.随时准备作改变,甚至计划的根本要素亦包含在改变的范围内?/p><p class="main">96.C有某些h很害怕变革?/p><p class="main">97.L能推动改革的团队成员?/p><p class="main">98.每隔一D|间作一ơ生涯发展的评量?/p><p class="main">99.CQ鼓励团队成员即是在帮助团队?/p><p class="main">100.与团队同事就生规划达成一致意见,q给他们提供必要的协助?/p><p class="main">101.团队解散后仍旧要与团队成员保持联p,因ؓ(f)你可能还?x)与他们再次合?/p><img src ="http://www.aygfsteel.com/surffish/aggbug/70968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/surffish/" target="_blank">surffish</a> 2006-09-21 08:05 <a href="http://www.aygfsteel.com/surffish/archive/2006/09/21/70968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>msn 不能登陆的解军_?/title><link>http://www.aygfsteel.com/surffish/archive/2006/08/21/64696.html</link><dc:creator>surffish</dc:creator><author>surffish</author><pubDate>Mon, 21 Aug 2006 00:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/surffish/archive/2006/08/21/64696.html</guid><wfw:comment>http://www.aygfsteel.com/surffish/comments/64696.html</wfw:comment><comments>http://www.aygfsteel.com/surffish/archive/2006/08/21/64696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/surffish/comments/commentRss/64696.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/surffish/services/trackbacks/64696.html</trackback:ping><description><![CDATA[关闭msnQ在开?>q行中分别输?<br />regsvr32 softpub.dll <br /><br />regsvr32 mssip32.dll <br /><br />regsvr32 intipki.dll <br /><br />regsvr32 MSXML3.dll <br /><br />11221399B<br />再重新启动msn卛_<img src ="http://www.aygfsteel.com/surffish/aggbug/64696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/surffish/" target="_blank">surffish</a> 2006-08-21 08:03 <a href="http://www.aygfsteel.com/surffish/archive/2006/08/21/64696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA操作数据库方式与设计模式应用 http://www.aygfsteel.com/surffish/archive/2006/04/18/41603.htmlsurffishsurffishTue, 18 Apr 2006 03:05:00 GMThttp://www.aygfsteel.com/surffish/archive/2006/04/18/41603.htmlhttp://www.aygfsteel.com/surffish/comments/41603.htmlhttp://www.aygfsteel.com/surffish/archive/2006/04/18/41603.html#Feedback0http://www.aygfsteel.com/surffish/comments/commentRss/41603.htmlhttp://www.aygfsteel.com/surffish/services/trackbacks/41603.html
1Q数据库url,username,password写死在代码中
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);

2Q采用Facade和Command模式Q用DBUtilcd装JDBC操作Q?br />数据库url,username,password可以攑֜配置文g中(如xml,properties,ini{)?br />q种Ҏ(gu)在小E序中应用较多?br />
2.DAO(Data Accessor Object)模式Q松耦合的开?br />DAO = data + accessor + domain object

例如Userc-domain object (javabean)
UserDAOc-accessor Q提供的Ҏ(gu)getUser(int id)Qsave(User user)内包含了JDBC操作
在业务逻辑中用这两个cL完成数据操作?br />
使用Factory模式可以方便不同数据库连接之间的UL?br />
3.数据库资源管理模?br />3.1 数据库连接池技?br />资源重用Q避免频J创建,释放q接引v大大量性能开销Q?br />更快的系l响应速度Q?br />
通过实现JDBC的部分资源对象接? Connection, Statement, ResultSet )Q可以用Decorator设计模式分别产生三种逻辑资源对象: PooledConnection, PooledStatement?PooledResultSet?br />

一个最单地数据库连接池实现Q?br />public class ConnectionPool {

private static Vector pools;
private final int POOL_MAXSIZE = 25;
/**
* 获取数据库连?br />* 如果当前池中有可用连接,则将池中最后一个返回;若没有,则创Z个新的返?br />*/
public synchronized Connection getConnection() {
Connection conn = null;
if (pools == null) {
pools = new Vector();
}

if (pools.isEmpty()) {
conn = createConnection();
} else {
int last_idx = pools.size() - 1;
conn = (Connection) pools.get(last_idx);
pools.remove(last_idx);
}

return conn;
}

/**
* 用完毕的数据库连接放回池?br />* 若池中连接已l超q阈|则关闭该q接Q否则放回池中下ơ再使用
*/
public synchronized void releaseConnection(Connection conn) {
if (pools.size() >= POOL_MAXSIZE)
try {
conn.close();
} catch (SQLException e) {
// TODO自动生成 catch ?br />e.printStackTrace();
} else
pools.add(conn);
}

public static Connection createConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
conn = DriverManager.getConnection(url, user, password);
} catch (InstantiationException e) {
// TODO自动生成 catch ?br />e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO自动生成 catch ?br />e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO自动生成 catch ?br />e.printStackTrace();
} catch (SQLException e) {
// TODO自动生成 catch ?br />e.printStackTrace();
}
return conn;
}
}

注意Q利用getConnection()Ҏ(gu)得到的ConnectionQ程序员很习(fn)惯地调用conn.close()Ҏ(gu)关闭了数据库q接Q那么上q的数据库连接机制便形同虚设。在调用conn.close()Ҏ(gu)Ҏ(gu)时如何调用releaseConnection()Ҏ(gu)Q这是关键。这里,我们使用Proxy模式和java反射机制?

public synchronized Connection getConnection() {
Connection conn = null;
if (pools == null) {
pools = new Vector();
}

if (pools.isEmpty()) {
conn = createConnection();
} else {
int last_idx = pools.size() - 1;
conn = (Connection) pools.get(last_idx);
pools.remove(last_idx);
}

ConnectionHandler handler=new ConnectionHandler(this);
return handler.bind(con);
}

public class ConnectionHandler implements InvocationHandler {
private Connection conn;
private ConnectionPool pool;

public ConnectionHandler(ConnectionPool pool){
this.pool=pool;
}

/**
* 动态代理绑定到指定Connection
* @param conn
* @return
*/
public Connection bind(Connection conn){
this.conn=conn;
Connection proxyConn=(Connection)Proxy.newProxyInstance(
conn.getClass().getClassLoader(), conn.getClass().getInterfaces(),this);
return proxyConn;
}

/* Q非 JavadocQ?br />* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO自动生成Ҏ(gu)存根
Object obj=null;
if("close".equals(method.getName())){
this.pool.releaseConnection(this.conn);
}
else{
obj=method.invoke(this.conn, args);
}

return obj;
}
}

在实际项目中Qƈ不需要你来从头开始来设计数据库连接池机制Q现在成熟的开源项目,如C3P0,dbcp,Proxool{提供了良好的实现。一般推荐用Apache dbcpQ基本用实例:(x)
DataSource ds = null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/myoracle");
if(ds!=null){
out.println("Connection is OK!");
Connection cn=ds.getConnection();
if(cn!=null){
out.println("cn is Ok!");
Statement stmt = cn.createStatement();
ResultSet rst = stmt.executeQuery("select * from BOOK");
out.println("

rst is Ok!" + rst.next());
while(rst.next()){
out.println("

BOOK_CODE:" + rst.getString(1));
}
cn.close();
}else{
out.println("rst Fail!");
}
}
else
out.println("Fail!");
}catch(Exception ne){ out.println(ne);
}


3.2 Statement Pool
普通预~译代码Q?br />String strSQL=”select name from items where id=??
PreparedStatement ps=conn.prepareStatement(strSQL);
ps.setString(1, ??;
ResultSet rs=ps.executeQuery();

但是PreparedStatement 是与特定的Connection兌的,一旦Connection关闭Q则相关的PreparedStatement 也会(x)关闭?br />Z创徏PreparedStatement ~冲池,可以在invokeҎ(gu)中通过sql语句判断池中q有没有可用实例?br />
4. 持久层设计与O/R mapping 技?br />1Q?HernateQ适合Ҏ(gu)产品的开发,q行闭化的设计
Hibernate 2003q被Jboss接管Q通过把java pojo对象映射到数据库的table中,采用了xml/javareflection技术等?.0提供了对存储q程和手写sql的支持,本n提供了hql语言?br />开发所需要的文gQ?br />hibernate配置文gQ?hibernate.cfg.xml ?hibernate.properties
hibernate 映射文gQ?a.hbm.xml
pojocL文gQ?a.java  

导出表与表之间的关系Q?br />a. 从java对象到hbm文gQxdoclet
b. 从hbm文g到java对象Qhibernate extension
c. 从数据库到hbm文gQmiddlegen
d. 从hbm文g到数据库QSchemaExport

2QIatis Q适合寚w留系l的攚w和Ҏ(gu)有数据库的复用,有很强的灉|?3Q?Apache OJBQ优势在于对标准的全面支?4QEJBQ适合集群服务器,其性能也不象某些h所诟病的那么差?5Q?JDO (java data object)
讄一个Properties对象Q从而获取一个JDO的PersistenceManagerFactoryQ相当于JDBCq接池中的DataSourceQ,q而获得一个PersistenceManager对象Q相当于JDBC中的Connection对象Q,之后Q你可以用这个PersistenceManager对象来增加、更新、删除、查询对象?br />JDOQL是JDO的查询语aQ它有点象SQLQ但却是依照Java的语法的?br />
5. Z开源框架的Struts+Spring+Hibernate实现Ҏ(gu)
CZQ这是一?层架构的web E序Q通过一个Action 来调用业务代理,再通过它来回调 DAOcR下面的程图表CZMyUsers是如何工作的。数字表明了程的先后顺序,从web?UserAction)C间层(UserManager)Q再到数据层(UserDAO)Q然后返回?br />Spring是AOP, UserManager和UserDAO都是接口.
1) web?UserAction) Q调用中间层的接口方法,UserManager作ؓ(f)属性注入?br />采用行的Struts框架Q虽然有很多Z屑一,但是q项技术在业界用的比较普遍Q能满基本的功能,可以减少培训学习(fn)成本?br />2) 中间?UserManager)Q将UserDAO作ؓ(f)属性注入,其实C要是调用数据层接口的一些方法;它处于事务控制中?br />采用Spring框架实现QIOC与AOP是它的代名词Q功能齐全,非常的一个架构?br />3) 数据?UserDAO)Q实现类l承HibernateDaoSupportc,在该cM可以调用getHibernateTemplate()的一些方法执行具体的数据操作?br />采用Hibernate做O/R mappingQ从U种q象可以看出QHibernate是EJB3.0的beta版?(转蝲文章请保留出处:(x)Java?www.javajia.com))



surffish 2006-04-18 11:05 发表评论
]]>
老婆使用说明?/title><link>http://www.aygfsteel.com/surffish/archive/2006/03/23/37018.html</link><dc:creator>surffish</dc:creator><author>surffish</author><pubDate>Thu, 23 Mar 2006 04:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/surffish/archive/2006/03/23/37018.html</guid><wfw:comment>http://www.aygfsteel.com/surffish/comments/37018.html</wfw:comment><comments>http://www.aygfsteel.com/surffish/archive/2006/03/23/37018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/surffish/comments/commentRss/37018.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/surffish/services/trackbacks/37018.html</trackback:ping><description><![CDATA[【品名】民间俗U老婆Q正式场合可U妻子或夫hQ古U内人,C可叫׃h?br />【成分】水、血液和脂肪cȝ水化合物?br />【性状】本品ؓ(f)l长条块状糖衣片Q表面涂层一般ؓ(f)_底、口U等化妆物,除去後呈黄Ԍ外观与除d略有差异Q本品随旉推移QŞ状会(x)有所改变Q出现发胖、vq现象Q但不媄响l用?br />【功能主沅R主dw恐惧症及传宗接代等疾Q对失恋和相思病也有明显效果?br />【用法用量】口服兼外用Q一ơ限一片。对无效者,可暂时停用ƈ向婚M家咨询,或间隔一D|间後重复使用?br />【注意事V本品仅适用于单w之成年h。服用时 心谨慎Q细心观察有无不良反应,如有必须马上停止服用Q没有则可l用。若忌烟酒等不良?fn)惯Q会(x)使疗效更佟?br />【规根{通常?5千克?5千克Q特D情况下亦有例外?br />【贮藏】常温下妥善保存Q室内阴凉处最佻I如在室外Q则 避免强烈阛_直射?贮藏期间Q尤忌随意弃|一旁不?br /><img src ="http://www.aygfsteel.com/surffish/aggbug/37018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/surffish/" target="_blank">surffish</a> 2006-03-23 12:00 <a href="http://www.aygfsteel.com/surffish/archive/2006/03/23/37018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java ?.net 的socket通讯的徏?/title><link>http://www.aygfsteel.com/surffish/archive/2005/12/09/23168.html</link><dc:creator>surffish</dc:creator><author>surffish</author><pubDate>Fri, 09 Dec 2005 08:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/surffish/archive/2005/12/09/23168.html</guid><wfw:comment>http://www.aygfsteel.com/surffish/comments/23168.html</wfw:comment><comments>http://www.aygfsteel.com/surffish/archive/2005/12/09/23168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/surffish/comments/commentRss/23168.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/surffish/services/trackbacks/23168.html</trackback:ping><description><![CDATA[<P>用java写服务端代码<BR><BR>import java.io.*;<BR>import java.net.*;<BR>public class test {<BR>  public test() {<BR>  }<BR>  public static final int PORT = 8080;<BR>  public static final String ip = "10.194.111.222";</P> <P>  public static void main(String[] args) throws IOException {<BR>    ServerSocket s = new ServerSocket(51,2,InetAddress.getByName(ip));<BR>    System.out.println("Started: " + s);<BR>    try {<BR>      // Blocks until a connection occurs:<BR>      Socket socket = s.accept();<BR>      try {<BR>        System.out.println(<BR>          "Connection accepted: "+ socket);<BR>        BufferedReader in =<BR>          new BufferedReader(<BR>            new InputStreamReader(<BR>              socket.getInputStream()));<BR>        // Output is automatically flushed<BR>        // by PrintWriter:<BR>        PrintWriter out =<BR>          new PrintWriter(<BR>            new BufferedWriter(<BR>              new OutputStreamWriter(<BR>                socket.getOutputStream())),true);<BR>        while (true) {<BR>          String str = in.readLine();<BR>          if (str.equals("END")) break;<BR>          System.out.println("Echoing: " + str);<BR>          out.println(str);<BR>        }<BR>      // Always close the two sockets...<BR>      } finally {<BR>        System.out.println("closing...");<BR>        socket.close();<BR>      }<BR>    } finally {<BR>      s.close();<BR>    }<BR>  }<BR>}<BR><BR>.net写客L(fng)代码<BR>private void button2_Click(object sender, System.EventArgs e)<BR>  {<BR>   try<BR>   {<BR>    stSend = new Socket ( AddressFamily.InterNetwork , <BR>     SocketType.Stream , ProtocolType.Tcp ) ;<BR>    //初始化一个Socket实例<BR>    IPEndPoint tempRemoteIP = new IPEndPoint(IPAddress.Parse("10.194.111.222"),51);<BR>    //Ҏ(gu)IP地址和端口号创徏q程l结?BR>    EndPoint epTemp =  ( EndPoint ) tempRemoteIP;<BR>    stSend.Connect ( epTemp ) ;</P> <P>   }<BR>   catch ( Exception err)<BR>   {<BR>    string s = err.ToString();<BR>   }<BR>  }</P><img src ="http://www.aygfsteel.com/surffish/aggbug/23168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/surffish/" target="_blank">surffish</a> 2005-12-09 16:36 <a href="http://www.aygfsteel.com/surffish/archive/2005/12/09/23168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBuilder 9 常见快捷?/title><link>http://www.aygfsteel.com/surffish/archive/2005/12/09/23115.html</link><dc:creator>surffish</dc:creator><author>surffish</author><pubDate>Fri, 09 Dec 2005 03:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/surffish/archive/2005/12/09/23115.html</guid><wfw:comment>http://www.aygfsteel.com/surffish/comments/23115.html</wfw:comment><comments>http://www.aygfsteel.com/surffish/archive/2005/12/09/23115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/surffish/comments/commentRss/23115.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/surffish/services/trackbacks/23115.html</trackback:ping><description><![CDATA[<P align=left>1.工作? (N) <BR><BR>目面板Qctrl + Alt + p (Project) <BR>设计面板: ctrl + Alt + c (content) <BR>l构面板: ctrl + Alt + s (Structure) <BR>信息面板: ctrl + Alt + M (Message) <BR>状态面? ctrl + Alt + Z <BR><BR><BR>2.主面?(代码面板和设计面? <BR><BR>ȀzM码模? ctrl + J (@1) <BR>参数提示信息的激z? ctrl + shift + H <BR>打开查询、替换窗? ctrl + F <BR>cȝ查询: ctrl + - <BR><BR><BR>3.F 键的用法 <BR><BR>F1: 帮助快捷 <BR>F4: q行多行 <BR>F5: 加入断点 <BR>F7: 当遇到方法时?x)运行方法内的代?<BR>F8: 逐步q行代码 <BR>F12: 代码面板和设计面板切?<BR><BR><BR>4. Shift 键的用法 <BR><BR>d多个相同lgQ?按shift键在选项上选取lgQ把lgd到窗口即?<BR>调整lg间间隔和寚wQ?假设有组件JPanel 1/2/3;(要达?个组件宽度相同,lg间隔相等Qƈ且都是依据JPanel1左对?,按shift键,用鼠标选中需要调整的lgQ?W一个选中的组件是其他的基?然后右键?<BR><BR><BR>5: codeInsight ?Codetemplates <BR>MemberInsight -- Ҏ(gu)当前的代码提C可用的cL员或Ҏ(gu)(说明) <BR>ParameterInsight -- 提示当前的方法需要用的参数 <BR>SymbolInsigh -- 查看当前的变量、方法或者类的愿代码?<BR><BR>MemberInsight: ctrl + space ?ctrl + H <BR>ParameterInsight: ctrl + shift + space ?ctrl + shift + H <BR>SymbolInsight: ctrl + Enter ?Alt + shift + H <BR>ClassInsight : ctrl + alt + space ?ctrl + alt + H <BR><BR><BR><BR><BR>注:(x) (@1)Q用代码功能:(x)(ctrl + J) <BR>1?在想要输入代码的位置输入代码摸板名,然后?ctrl + J(开发h员可以用主菜单上的Tools/Editor/Templates命o来查看代码摸板的名字) <BR>2、把光标定位于想要输入代码的位置Q然后按ctrl + J</P><img src ="http://www.aygfsteel.com/surffish/aggbug/23115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/surffish/" target="_blank">surffish</a> 2005-12-09 11:40 <a href="http://www.aygfsteel.com/surffish/archive/2005/12/09/23115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java环境变量讄 http://www.aygfsteel.com/surffish/archive/2005/12/07/22884.htmlsurffishsurffishWed, 07 Dec 2005 08:31:00 GMThttp://www.aygfsteel.com/surffish/archive/2005/12/07/22884.htmlhttp://www.aygfsteel.com/surffish/comments/22884.htmlhttp://www.aygfsteel.com/surffish/archive/2005/12/07/22884.html#Feedback0http://www.aygfsteel.com/surffish/comments/commentRss/22884.htmlhttp://www.aygfsteel.com/surffish/services/trackbacks/22884.htmlEclipse基础Q-java环境变量讄

http://blog.csdn.net/javamxj/archive/2004/10/11/131935.aspx

我是一名java的爱好者,理所当然装了不少java斚w的YӞ大部分是开放源码的Q而且多数是绿色YӞ只要解压Q设|一下环境变量即可用?

 
   ׃软g本n升比较频繁Q经帔R要重新设|用的环境变量Q而且我常常同时安装同一软g的不同版本(甚至是相同版本)。如eclipse我就分别在F,G,H三个盘上装了不同的版本,一个是中文版,一个是英文的Latest ReleaseQ一个是Stream StableQ反正是l色安装Q也不会(x)发生冲突Q这样通过Ҏ(gu)便于了解和测试最新版本的先进之处?/DIV>
   但是假如把JDK版本?.3升?.4Q即JDK目录名可能要从“j2sdk1.3”改为“j2sdk1.4”,如果是这L(fng)话,那么eclipse可能?x)无法再启动了(它要从环境变量中LJAVA_HOME变量Q而JAVA_HOME变量值已l从“j2sdk1.3”改为“j2sdk1.4”了Q?/DIV>
   在谈谈jakarta-tomcatQ这个Y件升U比较频J,如果你是l合eclipse来用Tomcat的,那么每次Tomcat升Q可能都要在eclipse中重新设|一下Tomcat的安装目录,是不是有些麻烦?
 
    对于此类问题Q解决的Ҏ(gu)很简单,只要把默认的软g安装目录名去掉版本号卛_(如果担心忘记版本P只要在目录中d一个readme文g加以说明卛_)?/DIV>
   
如上图,我的j2sdk,ant,jakata-tomcat{都没有版本受?/DIV>
 
   同样Q在环境变量讄中也没有出现版本受?/DIV>
   
 
q样Q如果再需要升UY件时Q仅仅把新版软g安装在旧版Y件目录即可。其它一般都不需要再改动了?/DIV>
 
另外Q在环境变量讄中,可以?变量%代替变量|如Path变量值可以这栯|?  %JAVA_HOME%\bin;%JBOSS_HOME%\bin;%ANT_HOME%\bin;


surffish 2005-12-07 16:31 发表评论
]]>ant - java 构徏工具QMaYongQ?/title><link>http://www.aygfsteel.com/surffish/archive/2005/12/07/22854.html</link><dc:creator>surffish</dc:creator><author>surffish</author><pubDate>Wed, 07 Dec 2005 06:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/surffish/archive/2005/12/07/22854.html</guid><wfw:comment>http://www.aygfsteel.com/surffish/comments/22854.html</wfw:comment><comments>http://www.aygfsteel.com/surffish/archive/2005/12/07/22854.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/surffish/comments/commentRss/22854.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/surffish/services/trackbacks/22854.html</trackback:ping><description><![CDATA[<P><FONT size=2>我们要开发一个javac:(x)其内容只有一句,输出"hello ant"字符丌Ӏƈ使用ant完成~译和运行工作,q个例子只是Z跑通antQ不附加多余的东ѝ?/FONT></P> <P><FONT size=2>下图为文件组l,请徏立相应的目录Qƈ~写HelloAnt.java<BR><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?style="ZOOM: 120%" height=198 src="http://www.huihoo.com/java/hello-ant/images/hello-ant-dir.gif" width=425 onload="java_script_:if(this.width>600)this.width=600" border=1></FONT></P> <P><FONT size=2>按照人家老外的文件组l规则咱也照搬?/FONT></P> <P align=left> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=69 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2> hello.ant.HelloAnt.java</FONT></TD></TR> <TR> <TD width="100%" height=52><FONT size=2><TEXTAREA style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体" name=S1 rows=7 cols=75>package hello.ant; public class HelloAnt{ public static void main(String[] args){ System.out.println("hello ant,ant 的第一ơ接触,好棒Q?); } }</TEXTAREA> </FONT></TD></TR></TBODY></TABLE></P> <P><FONT size=2>在项目根目录(hello-ant\)?个文Ӟ(x)ant执行配置文gbuild.xml</FONT></P> <P align=left> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=69 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2> build.xml</FONT></TD></TR> <TR> <TD width="100%" height=52><FONT size=2><TEXTAREA style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体" name=S1 rows=13 cols=75><?xml version="1.0" encoding="GB2312" ?> <!-- 一个项?可包含很多Q务组(target) --> <project default="main" basedir="."> <!-- 目中的一个Q务组,可包含很多Q?task:javac,java...) --> <target name="main"> <!--~译--> <javac srcdir="src\main\hello\ant" destdir="build\classes"/> <!--q行--> <java classname="hello.ant.HelloAnt"> <classpath> <pathelement path="build\classes"/> </classpath> </java> </target> </project></TEXTAREA> </FONT></TD></TR></TBODY></TABLE></P> <P><FONT size=2>ok,一切大功告成,哦,不,q没有运行它?/FONT></P> <P><FONT size=2>dos下进入hello-ant的目录,即build.xml所在的目录Q我们要用ant工具执行?Q?nbsp;</FONT></P> <P><FONT size=2>执行: %ant_home%/bin/ant -file build.xml     用ant工具执行当前目录下的配置文gbuild.xml </FONT></P> <P><FONT size=2>?nbsp; Qant -file build.xml                    你如果设|?ant_home%/bin到path?/FONT></P> <P><FONT size=2>q次ok了,q是{案Q?/FONT></P> <P align=left> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=69 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2>命o提示W窗?/FONT></TD></TR> <TR> <TD width="100%" bgColor=#000000 height=52><FONT color=#ffffff size=2>D:\temp\hello-ant>ant -file build.xml<BR>Buildfile: build.xml<BR><BR>main:<BR>[javac] Compiling 1 source file to D:\temp\hello-ant\build\classes<BR>[java] hello ant,ant 的第一ơ接触,好棒Q?BR><BR>BUILD SUCCESSFUL<BR>Total time: 2 seconds<BR>D:\temp\hello-ant></FONT> </TD></TR></TBODY></TABLE></P> <P><FONT size=2>查一下build/classes目录Q哦Q看到编译过的文件就在这?<BR>build/classes/hello/ant/HelloAnt.class.</FONT></P> <P><B><FONT color=#ff0000 size=2>hello ant q</FONT></B></P> <P><FONT size=2>(此段比较废话Q可以略q?<BR><FONT face=仿宋_GB2312>你也怼(x)_(x)q末单的工作写个批处理不得了,又xml又ant的,把我的时间都费完了Q我用jbuild?BR>webShpere不就得了Q怎末说你才明白呢Q反正网上开源项目大多数都用ant,你M能给人家?.jpx吧,<BR>而且q样的工具太贵,受不?当然用D的兄弟不怕^_^ )Q而且ant可以让你明确的管理和自动化所有的东西:<BR>~译-实施-试...,哎,E微ȝ一点点Q但节约你以前花在零的copy,paste上的旉.而且我发现管?BR>代码的质量有所提高.</FONT></FONT></P> <P><FONT size=2>我们要改qbuild.xmlQ让它做更多的事情:(x)</FONT></P> <UL> <LI><FONT size=2>定义全局变量</FONT> <LI><FONT size=2>初始?主要是徏立目?/FONT> <LI><FONT size=2>~译  (已有)</FONT> <LI><FONT size=2>打包为jar</FONT> <LI><FONT size=2>建立API documentation</FONT> <LI><FONT size=2>生成distribution产品</FONT> </LI></UL> <P class=MsoNormal><FONT face=仿宋_GB2312 size=2>凡事都讲I^衡,你要antl你做更多事Q当然要累一点点Q不q只用篏一ơ,以后的代码修改后的构建都?一键式"完成,我们制作一个hello的简单例子,你可以自己做j2ee的练?fn)?/FONT></P> <P class=MsoNormal><FONT face=宋体 size=2>我们要扩充目录结构,使它更像回事Q?/FONT></P> <P class=MsoNormal><FONT face=宋体 size=2>ant处理~译之前的目录:(x)</FONT></P> <P class=MsoNormal><FONT face=宋体 size=2><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=170 src="http://www.huihoo.com/java/hello-ant/images/hello-ant-dir-advance-2.gif" width=425 onload="java_script_:if(this.width>600)this.width=600" border=1></FONT></P> <P class=MsoNormal><FONT face=宋体 size=2>ant处理之后的目录:(x)</FONT></P> <P class=MsoNormal><FONT size=2><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=283 src="http://www.huihoo.com/java/hello-ant/images/hello-ant-dir-advance-1.gif" width=454 onload="java_script_:if(this.width>600)this.width=600" border=1></FONT></P> <P class=MsoNormal><FONT size=2>图中Q\src,\docs,\lib是自ql的文gl构Q\build,\dist是ant动态生成的成品?/FONT></P> <P class=MsoNormal><FONT size=2>\src                     源文Ӟ(x)java源,script源,jsp源,xml配置.....<BR>\src\main         java?BR>\src\script     window,unix,liunx的执行scriptQ我们的单只有一个:(x)<BR>                  run.bat:  java hello.ant.HelloAnt</FONT></P> <P class=MsoNormal><FONT size=2>\docs                手写说明文档<BR>\lib                   E序所需cd的jar,比如j2ee.jar,mail,jar...</FONT></P> <P class=MsoNormal><FONT size=2>\build               用ant动态生成的构徏目录<BR>\build\classes  ~译的类文g<BR>\build\docs         copy "\docs"的手写说明文,和ant生成的api文档<BR>\build\lib           攄我们自己的HelloAnt.class打包成品hello-ant.jar</FONT></P> <P class=MsoNormal><FONT size=2>\dist\bin        copy "\src\script" 得执行文?BR>\dist\docs      copy "\build\docs" 的文?BR>\dist\lib         除了copy "\build\lib"下的hello-ant.jar外,<BR>                              q应copy "\lib"的程序所需jarQ这里我们没有?/FONT></P> <P class=MsoNormal><FONT size=2>以上是我学老外的文件组l,大家可以按照自己的爱好组l?/FONT></P> <P class=MsoNormal><FONT size=2>我们~写必要的文Ӟ(x) </FONT></P> <P align=left> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=29 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2>hello.ant. HelloAnt.java</FONT></TD></TR> <TR> <TD width="100%" height=12><FONT size=2>已有</FONT> </TD></TR></TBODY></TABLE> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=69 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2>\src\script.bat</FONT></TD></TR> <TR> <TD width="100%" height=52><FONT size=2><TEXTAREA style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体" name=S1 rows=7 cols=75>@echo off echo ======================================================== echo 请先讄 Environment echo . echo JAVA_HOME: %JAVA_HOME% echo ====================================================== %java_home%\bin\java -classpath ..\lib\hello-ant.jar hello.ant.HelloAnt pause </TEXTAREA> </FONT></TD></TR></TBODY></TABLE> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=69 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2>\docs\index.html 随便写一个手写的文</FONT></TD></TR> <TR> <TD width="100%" height=52> <P align=center><B><FONT color=#ff0000 size=2>hello ant 软g目手册docs</FONT></B></P> <HR color=#008000 SIZE=1> <P align=center><B><A ><FONT color=#ff0000 size=2>讉Ka(chn)pi文</FONT></A></B></P>  </TD></TR></TBODY></TABLE> <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=69 cellSpacing=0 cellPadding=0 width="86%" border=1> <TBODY> <TR> <TD width="100%" bgColor=#c0c0c0 height=13><FONT size=2>\build.xml 配置文g </FONT></TD></TR> <TR> <TD width="100%" height=52><FONT size=2><TEXTAREA style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体" name=S1 rows=24 cols=83><?xml version="1.0" encoding="GB2312" ?> <!-- ======================================================================= hello-ant 目 ,学习(fn)ant工具的第2个build file. 参照ant的jakarta-ant-1.6alpha的build.xml Copyright (c) 2002 The Neusoft Software Foundation. All rights reserved. ======================================================================= --> <!-- 文l构? <project> <property/> 全局变量的定? <property/>... <target name="1"> dl?tasks) <javac></javac> 一javacd ... <oneTask></ontTask> 一其它Q? </target> <target name="2"> <javac></javac> ... <oneTask></ontTask> </target> </project> project代表一个项目, default:q行到名UCؓ(f)"dist"的target(dl? basedir:基准路径? --> <project default="dist" basedir="."> <!-- =================================================================== 定义属性(property tasksQ? 最好把用到的\径呀Q名U呀都在q里定义成全局变量 例:(x)定义 <property name="a" value="hello"/> 以后可以这L(fng)它:(x) <property name="b" value="${a}/b"/> 现在:b=="hello/b" =================================================================== --> <!--主要的系l环境属?-> <property environment="env"/><!--取window,unix...的环境变?-> <property name="java.home" value="${env.JAVA_HOME}"/> <property name="ant.home" value="${env.ANT_HOME}"/> <!--主要的app环境属?-> <property name="app.name" value="hello-ant"/> <property name="app.jar" value="${app.name}.jar"/> <property name="app.copyright" value=" Copyright (c) 2002 The Neusoft Software Foundation. All rights reserved."/> <!--app中src的属?-> <property name="src.dir" value="src" /> <property name="src.main" value="${src.dir}/main"/> <property name="src.script" value="${src.dir}/script"/> <!--app用到的lib--> <property name="lib.dir" value="lib"/> <!--app的build目录?-> <property name="build.dir" value="build" /> <property name="build.classes" value="${build.dir}/classes"/> <property name="build.docs" value="${build.dir}/docs"/> <property name="build.docs.api" value="${build.docs}/api"/> <property name="build.lib" value="${build.dir}/lib"/> <!--app的dist (distribution) 目录?-> <property name="dist.dir" value="dist"/> <property name="dist.bin" value="${dist.dir}/bin"/> <property name="dist.docs" value="${dist.dir}/docs"/> <property name="dist.lib" value="${dist.dir}/lib"/> <!--app的docs目录?-> <property name="docs.dir" value="docs"/> <!-- 定义一l\径以后可以通过id重用q组路径 Q例Q? <javac srcdir="src/main" destdir="build/classes"> <classpath refid="classpath"/> </javac> --> <path id="classpath"> <!--本项目只有一个javaQ用不上classpathQ这里只是做个例?-> <pathelement location="${build.classes}"/> <pathelement path="${java.home}/lib/tools.jar"/> </path> <!-- =================================================================== init 准备目录(File Tasks) 主要的目录结构通常是不?x)变的,一L(fng)成他? =================================================================== --> <target name="init"> <!--清除以前目录--> <delete dir="${build.dir}" failonerror="false" /> <delete dir="${dist.dir}" failonerror="false"/> <!--准备目录--> <mkdir dir="${build.dir}"/> <mkdir dir="${build.classes}"/> <mkdir dir="${build.docs}"/> <mkdir dir="${build.docs.api}"/> <mkdir dir="${build.lib}"/> <mkdir dir="${dist.dir}"/> <mkdir dir="${dist.bin}"/> <mkdir dir="${dist.lib}"/> </target> <!-- =================================================================== Build the code (Compile Tasks,File Tasks) =================================================================== --> <target name="build" depends="init"> <!--~译--> <javac srcdir="${src.main}" destdir="${build.classes}"> <classpath refid="classpath"/> </javac> </target> <!-- =================================================================== 打包文档(Archive Tasks) Create the project jars: xxx1.jar and xxx2.jar =================================================================== --> <target name="jars" depends="build"> <jar basedir="${build.classes}" jarfile="${build.lib}/${app.jar}"/> </target> <!-- =================================================================== Creates the API documentation =================================================================== --> <target name="javadocs" depends="jars" description="--> creates the API documentation"> <!--copy docs 手册... --> <copy todir="${build.docs}"> <fileset dir="${docs.dir}"/> </copy> <javadoc packagenames="hello.ant.*" sourcepath="${src.main}" defaultexcludes="yes" destdir="${build.docs.api}" author="true" version="true" use="true" windowtitle="Docs API"> <doctitle><![CDATA[<h1>hello ant Docs API</h1>]]></doctitle> <bottom><![CDATA[<i>${app.copyright}</i>]]></bottom> <tag name="todo" scope="all" description="To do:" /> </javadoc> </target> <!-- =================================================================== Create the distribution that can run (Archive Tasks) 主要是从各目录中把该copy的copy? =================================================================== --> <target name="dist" depends="javadocs"> <!--copy bin 执行文g --> <copy todir="${dist.bin}"> <fileset dir="${src.script}/"/> </copy> <copy todir="${dist.docs}"> <fileset dir="${build.docs}/"/> </copy> <!-- copy lib 文g --> <copy todir="${dist.lib}"> <fileset dir="${build.lib}/"/> </copy> </target> <!-- =================================================================== Cleans everything(File Tasks) 例如可以删除build中的文gQ留l你发挥? =================================================================== --> </project></TEXTAREA> </FONT></TD></TR></TBODY></TABLE></P> <P class=MsoNormal><FONT size=2><BR>build.xml多了些,但其实很单:(x)(注释比较详细可以参照Q这里再单说一?</FONT></P> <P class=MsoNormal><FONT size=2>一个build.xml包含一个工E的自动化处理的完整xml说明Qƈ且基本由3U东东组成:(x)</FONT></P> <P class=MsoNormal><FONT size=2><project ><BR><BR>    1.全局变量的定?BR>    <property/></FONT></P> <P class=MsoNormal><FONT size=2>    2.dl?BR>    <target><BR>        3.许多单项d... 像copy,delete,javac,jar...<BR>        <task1/><BR>        <task2/><BR>        <task3/><BR>    </target></FONT></P> <P class=MsoNormal><FONT size=2></project></FONT></P> <P class=MsoNormal><FONT color=#ff0000 size=2><B>参考及下蝲Q?BR><BR></B></FONT><FONT size=2><A ><FONT color=#003366>本文E序:W?个hello-ant<BR></FONT></A><BR><A ><FONT color=#003366>本文E序:W?个进阶的hello-ant</FONT></A></FONT></P> <P class=MsoNormal><FONT size=2>ant最C载:(x)<A ><BR><FONT color=#003366>http://jakarta.apache.org/ant/index.html</FONT></A> </FONT></P> <P class=MsoNormal><FONT size=2>ant具体的编写方法参考ant手册以下2部分ŞQ?BR><A ><FONT color=#003366>http://jakarta.apache.org/ant/manual/using</FONT></A> 使用说明<BR><A ><FONT color=#003366>http://jakarta.apache.org/ant/manual/coretasklist.html</FONT></A> 核心tasks<BR>其他一大堆东西你要看也行。不q我觉得比较费旉?A ><BR><FONT color=#003366>http://jakarta.apache.org/ant/manual/index.html</FONT></A>  手册index<BR><BR>huihoo.com译改编?A ><FONT color=#003366>ant/manual/using</FONT></A><BR><A ><FONT color=#003366>http://www.huihoo.com/java/ant.html</FONT></A> <BR><BR></FONT><FONT size=2><span id="wmqeeuq" class=p16><B>用ANT构造Application</B></SPAN>作者:(x)余斌?   <BR><A ><FONT color=#003366>http://developer.ccidnet.com/pub/disp/Article?columnID=295&articleID=27619&pageNO=1<BR><BR></FONT></A>ibm 利用 Ant ?JUnit q行增量开发——用单元测试来逐步改进代码</FONT><A ><FONT size=2><BR><FONT color=#003366>http://www-900.ibm.com/developerWorks/cn/java/j-ant/index.shtml</FONT></FONT></A></P><img src ="http://www.aygfsteel.com/surffish/aggbug/22854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/surffish/" target="_blank">surffish</a> 2005-12-07 14:33 <a href="http://www.aygfsteel.com/surffish/archive/2005/12/07/22854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的Build工具—Ant应用指南Q引用)http://www.aygfsteel.com/surffish/archive/2005/12/07/22852.htmlsurffishsurffishWed, 07 Dec 2005 06:29:00 GMThttp://www.aygfsteel.com/surffish/archive/2005/12/07/22852.htmlhttp://www.aygfsteel.com/surffish/comments/22852.htmlhttp://www.aygfsteel.com/surffish/archive/2005/12/07/22852.html#Feedback0http://www.aygfsteel.com/surffish/comments/commentRss/22852.htmlhttp://www.aygfsteel.com/surffish/services/trackbacks/22852.html本文以最新发布的Ant 1.5.1ZQ介l这ƾ优U的Build工具的安装配|、基本应用和一些高U话题。最新的Ant下蝲地址?http://jakarta.apache.org/ant/ ?

Ant是一U基于Java的Build工具。理Z来说Q它有些cM于C中的makeQ但比make优越。现在存在的大多数Build工具Q如make、gnumake、nmake、jam{都存在q样或那L(fng)不Q比如依赖于特定的^台、配|文件过于复杂或者对格式无法查而容易出错等。与q些工具相比较,Ant的两个特性决定了它是一ƾ优U的Build工具Q?

1. ZJava的实现。具有良好的跨^台性,同时可以通过增加新的JavacL扩展Ant的功能,而无需M解不同^C不同的脚本语a?

2.ZXML的配|文件。Ant以XML?wi)来描述Target/Task的关p,文gl构清晰、易L写,q且利用XMLҎ(gu)式的控制来避免由于配|文件的错误造成的Build操作p|?

安装与配|?

Ant的安装非常简单,把从|上下蝲的jakarta-ant-1.5.1-bin.zip解开C个目录下卛_Q以下假定安装在目录D:\jakarta-ant-1.5.1Q。接下来需要进行环境变量配|:(x)

SET ANT_HOME=D:\jakarta-ant-1.5.1 //注意是Ant的安装目录,不是bin子目?BR>SET PATH=%PATH%;%ANT_HOME%\bin;


在配|环境变量之前,L(fng)认已l正设|了JAVA_HOMEpȝ变量。输入ant命oQ看到如下输明已成功安装了Ant工具Q?

Buildfile: build.xml does not exist!
Build failed


提示信息表明在当前目录不存在build.xml配置文gQ但q本w已l说明Ant成功q行了?

快速入?

下面用一个最单也是最l典的例?HelloWorld来感受一下Ant吧?

//HelloWorld.java
package com.sharetop.antdemo;
public class HelloWorld {
public static void main( String args[] ) {
System.out.println("Hello world. ");
}
}


要让Ant~译q个文gQ首先需要编写一个Build配置文g。在一般情况下Q这个文件被命名为build.xml?

<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir="." >
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello.jar" />
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
<java classname="com.sharetop.antdemo.HelloWorld" classpath="${hello_jar}"/>
</target>
</project>


来看一下这个文件的内容Q它描述了以下信息:(x)工程的名字ؓ(f)HelloWorldQ工E有四个targetQ分别是init、compil、build和runQ缺省是run。compile只有一个Q务javacQ源文g位于src目录下,输出的类文g要放在classes目录下。build的Q务是jarQ生成的jar文g为hello.jarQ它打包时以classes为根目录。而run则是执行q个HelloWorldc,用hello.jar作ؓ(f)classpath。这四个target之间有一个依赖关p,q种关系用depends来指定。即如果Target A依赖于Target BQ那么在执行Target A之前?x)首先执行Target B。所以从下面q行~省TargetQrunQ的输出看,q四个Target的执行顺序是Qinit→compile→build→run。文件目录结构如?所C。HelloWorld.java文g在src\com\sharetop\antdemo子目录下?


? ant_demo应用的目录结?


在命令行输入命oQantQ然后运行,可以看到如下输出Q?

如果配置文g名不是build.xmlQ比如是build_front.xmlQ那么,可以使用-buildfile命o参数指定Q?

G:\myDoc\ant_demo>ant -buildfile build_front.xml


也可以单独执行指定的某个targetQ比如,只编译不打包执行Q可以用下面输入命令即可:(x)

G:\myDoc\ant_demo>ant compile

在相应的目录下会(x)扑ֈ~译出的HelloWorld.class文g?

再看看上面的build.xml配置文gQ文件开头定义了3个属性,分别指定了源文g输出路径、类文g输出路径和生成的Jar文g名,后面对这些\径的引用都通过一?{property name}来引用。所以,要注意这样一个原则“目录的定义与目录的引用应该分开”?BR>基本应用

建立工程的目?

一般要Ҏ(gu)工程的实际情冉|建立工程的目录结构。但是,有一些比较通用的组lŞ式可供参考,比如所有的jakarta目都用类似的目录l构。下面让我们来看一下这U目录结构的特点?

?

目录 文g
bin 公共的二q制文gQ以及运行脚?
build 临时创徏的文Ӟ如类文g{?
dist 目标输出文gQ如生成Jar文g{?
doc/javadocs 文?
lib 需要导出的Java?
src 源文?

对于一个简单的工程Q一般包括表1的几个目录。其中bin、lib、doc和src目录需要在CVS的控制之下。当然在q样的目录结构上Q也可以做一些调_例如Q可以徏立一个extra目录来放|需要发布的Jar文g、Inf文g及图像文件等。同P如果开发Web应用可以建立一个Web目录攄JSP、HTML{文件?

如果我们开发的是一个比较复杂的目Q包括多个子目Qƈ且各个子目是由不同的开发h员来完成的,那么要如何来设计它的目录l构Q首先有一Ҏ(gu)需要确定的Q不同的子项目应该拥有不同的Build文gQƈ且整个项目也应该有一个ȝBuild文g。可以通过Antd或是AntCalld调用子项目的Build文gQ如下例Q?

<target name="core" depends="init">
<ant dir="components" target="core"/>
<ant dir="waf/src" target="core"/>
<ant dir="apps" target="core"/>
</target>


在各个子目的耦合不是非常紧密的情况下Q各个子目应该有各自独立的目录l构Q也是说它们可以有自己的src、doc、build、dist{目录及自己的build.xml文gQ但是可以共享lib和bin目录。而对于那些耦合紧密的子目Q则推荐使用同一个src目录Q但是不同的子项目有不同的子目录Q各个子目的build.xml文g可以攑֜根目录下Q也可以Ud各个子项目的目录下?

~写Build文g

要用好Ant工具Q关键是要编写一个build.xml文g。要~写Z个结构良好、灵zd扩展的Build文gQ有两个问题要考虑Q一是了解Build文g的基本结构,二是了解Ant定义的大量Q务?

Ant的Build文g是一个标准的XML文gQ它包含一个根节点ProjectQ每个Project定义了至一个或多个TargetQ每个Target又是一pdTask的集合。它们之间的关系如图2所C?


? build.xml文g的结?/P>
每个Task是一D可被执行的代码Q比如,前例中的javac、jar是两个最常用的Task。Ant定义了大量的核心TaskQ我们要考虑的第二个问题正是如何L握这大量的Task。其实唯一的方法就是边学习(fn)边实践,q方面最好的参考就是官方的Ant使用手册?

外部文g的?

使用外部的Property文g可以保存一些预讄的公共属性变量。这些属性可以在多个不同的Build文g中用?

可以一个外部的XML文g导入Build文g中,q样多个目的开发者可以通过引用来共享一些代码,同样Q这也有助于Build文g的重用,CZ代码如下所C:(x)

<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../share-variable.xml">
<!ENTITY build-share SYSTEM "file:../build-share.xml">
]>
<project name="main" default="complie" basedir=".">
&share-variable;
&build-share;
... ...


在J2EE目中的应用

只要掌握了Ant的用方法,在J2EE目中的应用与在其它目中的应用q没有太大的不同Q但是仍有几Ҏ(gu)需要注意的?

一是要清楚War和Jar文g的目录结构,主要是War的配|文件web.xml文g的位|和EJB的配|文Ӟejb-jar.xml和weblogic-ejb-jar.xml{)的位|,在调用Jard打包文g时一定要记得把它们也包含q来。一般在~译之前p注意把这些需打包的文件拷入相应目录下。二是在J2EE目中可能会(x)涉及C些特D的dQ比如在Weblogic中会(x)调用ejbc预编译EJB的代码存根,或者需要在Ant中同时发布Jar到相应的服务器中{。可以用两种途径实现q些dQ一是扩展Antd实现q些dQ二是直接用Javad来执行这些命令。下面是打包、发布一个EJB的build.xml配置文g片断Q代码如下:(x)

<target name="deploy_HelloEJB" depends="compile">
<delete dir="${temp}/ejb_make"/> <!-- 首先删除临时目录 -->
<delete file="${temp}/helloEJB.jar"/>
<!-- 删除WebLogic域中老版本的EJB -->
<delete file="${weblogic.deploy.dest}/helloEJB.jar"/>
<!-- 创徏META-INF目录Q放|ejb-jar.xml和weblogic-ejb-jar.xml -->
<mkdir dir="${temp}/ejb_make/META-INF"/>
<!-- 拯ejb-jar.xml和weblogic-ejb-jar.xml C(f)时目?->
<copy todir="${temp}/ejb_make/META-INF">
<fileset dir="etc/baseinfo">
<include name="*.xml"/>
</fileset>
</copy>
<!-- 拯所有的helloEJBcd临时目录 -->
<copy todir="${temp}/ejb_make/">
<fileset dir="${dest.classes}/"> <!-- dest.classes是输出的cL件目?-->
<include name="${dest.classes}/helloEJB/**"/>
</fileset>
</copy>
<!-- 所有这些文件打包成helloEJB.jar -->
<jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/>
<!-- q行weblogic.ejbc~译 -->
<java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" >
<classpath>
<fileset dir="lib">
<include name="*.jar" />
</fileset>
</classpath>
<arg value="${temp}/helloEJB.jar" />
<arg value="${temp}/helloEJB_deploy.jar" />
</java>
<!-- 拯/发布到WebLogic的{DOMAIN}\applications目录 -->
<copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/>
</target>


用Ant配合JUnit实现单元试

Ant 提供了JUnitd,可以执行单元试代码。如何用JUnitQ以及如何编写测试用?TestCase)Q感兴趣的读者可以参阅JUnit的相x。在Ant中用JUnit的方法非常简单,首先需要把junit.jar拷入ANT_HOME\lib下,认在这个目录下有optional.jarQ因为JUnit是Ant的扩展Q务,需要引用这个扩展包。然后就是在Build文g中加入JUnit的Q务,代码如下Q?

<target name="run" depends="client">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath>
<pathelement location="client.jar" />
</classpath>
<formatter type="plain" />
<test name="com.sharetop.antdemo.HelloWorldTest" />
</junit>
</target>


高话题

为Ant开发扩展Q?

为Ant实现扩展d其实是非常容易的Q只需按照以下几个步骤卛_Q?

1. 创徏一个Javacȝ承org.apache.tools.ant.Taskc;

2. Ҏ(gu)个属性实现setҎ(gu)。Ant?x)根据需要自动完成类型{换;

3. 如果扩展的Q务需要嵌套其它的TaskQ那么这个Javacd需实现接口org.apache.tools.ant.TaskContainerQ?

4. 如果扩展的Q务要支持TextQ需要增加一个方法void addText(String)Q?

5. Ҏ(gu)个嵌套的元素Q实现create、add ?addConfigured Ҏ(gu)Q?

6. 实现public void executeҎ(gu)Q?

7. 在build.xml文g中?<taskdef> 来引用自定义的Task?

下面以一个简单的例子来说明如何ؓ(f)Ant增加一个hellodQ它可以q箋打印多条信息Q打印的ơ数由属性count指定Q而打印的内容则由它内嵌的一个helloinfod的message属性指定,看上去这非常cMJSP中自定义标签的一些概念,实现代码如下Q?

//HelloInfoTask.java
package com.sharetop.antdemo;
import org.apache.tools.ant.*;
public class HelloInfoTask {
private String msg;
public void execute() throws BuildException {
System.out.println(msg);
}
public void setMessage(String msg) {
this.msg = msg;
}
}


下面是外部Taskcȝ代码Q?

//HelloTask.java
package com.sharetop.antdemo;
import org.apache.tools.ant.*;
public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer
{
private Task info;
private int count;
public void execute() throws BuildException {
for(int i=0;i<count;i++)
info.execute();
}
public void setCount(int c){
this.count=c;
}
public void addTask(Task t){
this.info=t;
}
}


实现了这两个TaskQ在build.xml文g中定义它的task nameQ就可以在Target中执行它了。如果你不想使用 <taskdef> 标签来定义TaskQ也可以通过修改default.properties文g来实现引入新TaskQ这个文件位于org.apache.tools.ant.taskdefs 包里。下例是一个?标签来引入新Task的Build文g部分Q?

<target name="hello" depends="client">
<taskdef name="hello"
classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/>
<taskdef name="helloinfo"
classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/>
<hello count="3" >
<helloinfo message="hello world" />
</hello>
</target>
在自qE序中调用Ant

Ant的Q务其实就是一D功能代码。Ant内置的大量Q务对于我们开发Java应用h非常大的意义Qؓ(f)什么我们不能直接用呢Q?

因ؓ(f)管在程序中调用Ant的Q务ƈ不复杂,而且我们知道Ant的Q务其实都是一些Javac,调用的方法无非就是执行这些类而已Q不q在执行之前需要对它做一些初始化的工作,所以我们需要引用一个Taskcȝ子类来实现这个功能,比如如下代码Q?

package com.sharetop.antdemo;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.*;
import java.io.File;
public class RunAntTask {
public RunAntTask() {
}
public static void main(String args[]){
AntJAR j = new AntJAR();
j.setBasedir(new File("./classes"));
j.setJarfile(new File("aaa.jar"));
j.execute();
}
}
final class AntJAR extends Jar {
public AntJAR() {
project = new Project();
project.init();
taskType = "jar";
taskName = "jar";
}
}


注意AntJARcȝ构造方法,先创ZProjectq初始化它,q是直接调用Task的必需条g?

如果要在自己的程序中执行AntQ需要了解的是Ant定义的几个BuildEventQ它包括Q?

?Build started

?Build finished

?Target started

?Target finished

?Task started

?Task finished

?Message logged

我们需要做的是实现BuildListener接口来处理各U事Ӟ而执行Ant的方法与上面l的例子非常cMQ以实际开发的AntBuilder软g的部分代码ؓ(f)例:(x)

public void buildTarget(String targetName,String buildFileName) {
try {
Project p = new Project();
p.init();
File f = new File(buildFileName);
p.setUserProperty("ant.file",f.getAbsolutePath());
ProjectHelper.configureProject(p,f);
p.addBuildListener(this);
if( targetName==null )
p.executeTarget(p.getDefaultTarget());
else
p.executeTarget(targetName);
}
catch (Exception ex) {
jTextArea1.append(ex.getMessage());
}
}


创徏Projectq初始化Q设|它的配|文Ӟbuild.xmlQ,执行它缺省的或指定的TargetQ然后在实现了BuildListenser接口的监听器cM对你感兴的事g作处理,代码如下Q?

public void buildStarted(BuildEvent event){ /* nothing*/ }
public void buildFinished(BuildEvent event) { /* nothing*/ }
public void targetStarted(BuildEvent event) {
this.jTextArea1.append(event.getTarget().getName()+": \n\r");
}
public void targetFinished(BuildEvent event) {/* nothing*/ }
public void taskStarted(BuildEvent event) {/* nothing*/ }
public void taskFinished(BuildEvent event) { /* nothing*/ }
public void messageLogged(BuildEvent event) {
int prior = event.getPriority();
switch(prior){
case Project.MSG_ERR :
this.jTextArea1.append("["+event.getTask().getTaskName()+"]Err:"
+event.getMessage());
break;
case Project.MSG_INFO:
this.jTextArea1.append("["+event.getTask().getTaskName()+"]"+event.getMessage
());
break;
case Project.MSG_WARN:
this.jTextArea1.append("["+event.getTask().getTaskName()+"]"
+event.getMessage());
break;
case Project.MSG_VERBOSE:
this.jTextArea1.append(event.getMessage());
break;
}
}


Build.xml文g的写法每个公叔R有不同,q里没有太大的参考h(hun)|所以略厅R(全文完)

surffish 2005-12-07 14:29 发表评论
]]>
վ֩ģ壺 ʳ| | | | | Ͻ| º| | | ƽ| żҽ| | | | | | | | | | ƽ| | | | ګ| | ƽ| | | | | | | | | ƽ| | | ǿ| ڳ| ʯʨ|