<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>The Notes of Dark Mage</title>
    <description></description>
    <link>http://jeffreyhsu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>今天参加了SUN的glassfish交流会，呵呵</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/219587" style="color:red;">http://jeffreyhsu.javaeye.com/blog/219587</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://wiki.developers.sun.com.cn/index.php/GlassFish" target="_blank">http://wiki.developers.sun.com.cn/index.php/GlassFish</a></p>
<p>天气很热，来的人还是不少</p>
<p>先是活动的组织者，sun工程研究院的 <a href="http://blogs.sun.com/jiangjian" target="_blank">Jim Jiang</a>
 做了关于glassfish的介绍和演讲</p>
<p>然后是webex的QA高级总监<a href="http://blog.csdn.net/KerryZhu" target="_blank">朱少民</a>
先生关于开源和测试的演讲</p>
<p>之后是自由交流，讨论很热烈，从企业技术一直说到web开发</p>
<p>&nbsp;</p>
<p>可能是工作日的关系，企业界来的朋友很少。合肥的技术沙龙还是太少了，开发人员彼此都不怎么交流</p>
<p>实际上合肥还是有很多有激情有想法的热爱技术的朋友的</p>
<p>希望sun以后能多多举办这样的活动，带动合肥社区的发展</p>
<p>&nbsp;</p>
<p>今天认识了很多朋友，很开心：）</p>
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/219587#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 17:05:07 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/219587</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/219587</guid>
      </item>
      <item>
        <title>JPA + Hibernate 3  CRUD操作历史审计日志的解决方案（附源码） </title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/191696" style="color:red;">http://jeffreyhsu.javaeye.com/blog/191696</a>&nbsp;
          发表时间: 2008年05月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>我们前段时间有个.net项目需要用j2ee改造，有个需求是要对所有的数据库操作(CRUD)都要做历史记录，要记录操作内容，操作的用户和操作时间。这样的需求称为审计日志 Audit log。<br />
<br />
项目采用Spring构建，持久层技术采用的是 JPA规范 + Hibernate实现的方案<br />
要实现审计日志的需求，我试用了多种技术方案，最终确定了采用Hibernate 3的新特性事件驱动架构来解决：<br />
<span style="color: #ec8f1e;"><br />
</span>
<span style="color: #ff6600; font-size: small;"><strong>技术选型：</strong>
</span>
</p>
<ol>
<li>最土的，在所有的Dao方法中显示的编写日志记录代码<br />
该项目以前是用.net这么干的，这种做法重复工作量太大，维护性差，并且也没实现字段级变更的记录，根本不予考虑。<br />
<br />
</li>
<li>数据库触发器 - 与数据库耦合<br />
与数据库耦合，违背了使用hibernate的初衷，也不予考虑<br />
<br />
</li>
<li>原生的Hibernate Interceptor<br />
优点：可以在hibernate对象操作的时候获取最为详细的运行期信息，字段名，原始值，修改后值等等。<br />
缺点：在JPA&nbsp; API的封装下很难获取到hibernate的session，不能进行持久化操作。<br />
<br />
</li>
<li>JPA callback / event-listener<br />
优点：JPA规范，最为优雅简单<br />
缺点：功能太弱，不能满足需求<br />
<br />
</li>
<li>很自然地，干这种事AOP似乎比较合适<br />
优点：灵活，在spring容器中，可以访问所有spring bean<br />
缺点：不能获取详细的运行期信息（字段名，原始值，等等），无法感知hibernate的事务执行，即使dao事务rollback，仍然会插入一条操作历史记录，破坏了&ldquo;操作&rdquo;和&ldquo;历史&rdquo;的一致性。<br />
<br />
</li>
<li><span style="color: #333399;"><strong>采用Hibernate 3的新特性 Event-listener</strong>
</span>
<br />
可以解决以上所有问题<br />
能够取得运行期详细信息，除了能记录粗粒度的实体的保存删除操作外，还能精确追踪对实体字段修改、实体关联/级联关系的变更，能记录更新前的值、更新后的值，可以生成详细日志。<br />
灵活解耦，跨数据库，不影响原有代码。</li>
</ol>
<p>&nbsp;&nbsp;&nbsp; Hibernate3 新特性事件处理框架是hibernate 2拦截器的一个补充或者替代，由拦截器被动拦截操作事件变成事件源的主动驱动，这是一个进步。<a href="http://www.hibernate.org/hib_docs/v3/reference/en/html/events.html#objectstate-events" target="_blank">Hibernate 事件框架官方文档.</a>
</p>
<p>&nbsp;&nbsp;&nbsp; Hibernate3中定义了很多的事件，涵盖了持久化过程中不同的生命周期。简单说Session的一个方法（load, flush...）分别对应一个事件，当该方法被调用时，就会触发一个相应的事件，这个事件会被我们预先定义的事件监听器收到，再进行相应的处理。这种方式来做审计日志是再适合不过。</p>
<p>&nbsp;&nbsp;&nbsp; 但也有个缺点就是这样的Event-listener是脱离主容器（比如Spring IoC环境）单独实例化的，无法访问主容器的资源（比如要取得当前登录的用户信息就会比较麻烦）。这个暂时还没解决。<br />
<br />
在这里我们选取PostInsertEventListener（插入后事件）,PostUpdateEventListener（更新后事件）,PostDeleteEventListener（删除后事件）接口作为CRUD方法的监听接口。hibernate3中事件是分为pre和post，表示该发生事件前、后。这里我们全部用Post，因为PostEvent只有在数据实际改变后才会触发，假如CRUD事务因为异常回滚，则不会触发事件。<br />
<br />
首先定义一个mark接口Historiazable，实现该接口的entity类表明是需要做审计日志的。<br />
然后编写我们自定义的EventListener类，实现上述的事件接口。<br />
在事件接口实现方法里在根据不同的事件编写审计日志的代码。</p>
<pre name="code" class="java">public class HistoryListener implements PostInsertEventListener,
        PostUpdateEventListener, PostDeleteEventListener {
   
    @Override
    public void onPostInsert(PostInsertEvent event) {
        if (event.getEntity() instanceof Historizable) {
        //  保存 插入日志
        }
    }

    @Override
    public void onPostUpdate(PostUpdateEvent event) {
        if (event.getEntity() instanceof Historizable) {
        // 保存 修改日志
        }
    }

    @Override
    public void onPostDelete(PostDeleteEvent event) {
        if (event.getEntity() instanceof Historizable) {
        // 保存 删除日志
        }
    }
}</pre>
<p>&nbsp;</p>
<p><span style="color: #ff6600;">配置EventListener</span>
<br />
编辑hibernate.cfg.xml，配置监听器</p>
<pre name="code" class="xml">    &lt;session-factory&gt;
        &lt;listener type=&quot;post-insert&quot; class=&quot;net.jeffrey.hibernate.history.HistoryListener&quot;/&gt;
        &lt;listener type=&quot;post-update&quot; class=&quot;net.jeffrey.hibernate.history.HistoryListener&quot;/&gt;
        &lt;listener type=&quot;post-delete&quot; class=&quot;net.jeffrey.hibernate.history.HistoryListener&quot;/&gt;
    &lt;/session-factory&gt;</pre>
<p>&nbsp;</p>
<p><span style="color: #ff6600;">配置持久化单元</span>
<br />
在persistence.xml中加入<br />
&nbsp;&lt;property name=&quot;hibernate.ejb.cfgfile&quot; value=&quot;hibernate.cfg.xml&quot;/&gt;<br />
这样JPA环境启动后，就会正确装载初始化自定义的事件监听器。<br />
<br />
<span style="color: #ff6600;">源代码：</span>
<br />
详细的代码请下载源代码，有完整的注释和单元测试用例，一看就明白了。<br />
为了简便起见，没有建立spring或者ejb3项目，使用的是POJO方式，但都是一样的。</p>
<p>在源码根目录里的data.sql是为单元测试准备的基础数据，请在测试前导入到数据库中</p>
<p>源码是Netbeans项目，需要添加Hibernate的依赖和mysql驱动<br />
在http://www.hibernate.org/6.html 下载最新版的Hibernate Core, Hibernate Annotations和<br />
Hibernate EntityManager。解压缩后将lib里所有的jar添加到项目中（注意不要把ant相关jar添加进去，可能会导致netbeans无法正常构建项目）。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/191696#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 10 May 2008 11:08:24 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/191696</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/191696</guid>
      </item>
      <item>
        <title>悼念在4.28列车相撞重特大事故遇难的同胞</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/187741" style="color:red;">http://jeffreyhsu.javaeye.com/blog/187741</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>截止到现在，已经有70人死亡。</p>
<p>实际上在今年1月份这条铁路就发生过意外，动车组撞上了非法施工的工人，死伤惨重。</p>
<p>结果不到半年内，惨剧又一次上演，我觉得这次事故很可能是同样的原因。</p>
<p>意外从来都不是意外发生。必须要有人负责任。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/187741#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 19:31:42 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/187741</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/187741</guid>
      </item>
      <item>
        <title>全新安装配置 Apache2.2 + MySql + PHP5 + FleaPHP</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/180289" style="color:red;">http://jeffreyhsu.javaeye.com/blog/180289</a>&nbsp;
          发表时间: 2008年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          
<ol style="margin-left: 0.318in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><p style="margin: 0in; font-family: 微软雅黑; font-size: 10pt"><span style="font-size: 10pt; font-family: 微软雅黑"><br /></span></p><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">下载</span><ul style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><a href="http://httpd.apache.org/"><span style="font-size: 10pt; font-family: 微软雅黑">Apache</span></a></li></ul><ul style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><a href="http://www.php.net/"><span style="font-size: 10pt; font-family: 微软雅黑">PHP</span></a></li></ul><ul style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.mysql.com%2F&amp;ei=I-D5R4bRDofwswKUwvCrAg&amp;usg=AFQjCNGTx-3Plb9D7H7kow-uAyIZnQPWnw&amp;sig2=cI90-Ts2uAwdJtNKvLobjQ"><span style="font-size: 10pt; font-family: 微软雅黑">MySql</span></a><span style="font-size: 10pt; font-family: 微软雅黑"> </span></li></ul><ul style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><a href="http://www.fleaphp.org/"><span style="font-size: 10pt; font-family: 微软雅黑">FleaPHP</span></a></li></ul></li><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>下载</span><span>2.2.8</span><span>版本</span></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><a href="http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.2.8-win32-x86-no_ssl.msi">http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.2.8-win32-x86-no_ssl.msi</a></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>下载</span><span>zip</span><span>版本：</span></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><a href="http://www.php.net/get/php-5.2.5-Win32.zip/from/a/mirror">http://www.php.net/get/php-5.2.5-Win32.zip/from/a/mirror</a></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>下载</span><span>5.0:</span></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><a href="http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51a-win32.zip/from/pick#mirrors">http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51a-win32.zip/from/pick#mirrors</a></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>下载</span><span>1.0 full zip:</span></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><a href="http://www.fleaphp.org/downloads/files/fleaphp-full.zip">http://www.fleaphp.org/downloads/files/fleaphp-full.zip</a></p><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">安装</span><ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">安装</span><span style="font-size: 10pt; font-family: 微软雅黑">Apache2.2</span></li></ol><ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">安装</span><span style="font-size: 10pt; font-family: 微软雅黑">MySQL</span><span style="font-size: 10pt; font-family: 微软雅黑">，安装比较简单，采用默认配置即可，只是注意选择编码为</span><span style="font-size: 10pt; font-family: 微软雅黑">utf-8</span><span style="font-size: 10pt; font-family: 微软雅黑">。</span></li><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">安装</span><span style="font-size: 10pt; font-family: 微软雅黑">PHP</span><ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">解压缩下载的</span><span style="font-size: 10pt; font-family: 微软雅黑">php5</span><span style="font-size: 10pt; font-family: 微软雅黑">的</span><span style="font-size: 10pt; font-family: 微软雅黑">zip</span><span style="font-size: 10pt; font-family: 微软雅黑">文件（非install版），放置到</span><span style="font-size: 10pt; font-family: 微软雅黑">c:\php5</span><span style="font-size: 10pt; font-family: 微软雅黑">下，</span></li><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">将</span><span style="font-size: 10pt; font-family: 微软雅黑">php</span><span style="font-size: 10pt; font-family: 微软雅黑">目录下的</span><span style="font-size: 10pt; font-family: 微软雅黑">php.ini.recommended</span><span style="font-size: 10pt; font-family: 微软雅黑">，重命名为</span><span style="font-size: 10pt; font-family: 微软雅黑"> php.ini</span></li><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">把</span><span style="font-size: 10pt; font-family: 微软雅黑">php</span><span style="font-size: 10pt; font-family: 微软雅黑">目录下的</span><span style="font-size: 10pt; font-family: 微软雅黑">php5ts.dll,libmysql.dll</span><span style="font-size: 10pt; font-family: 微软雅黑">复制到目录</span><span style="font-size: 10pt; font-family: 微软雅黑">
       c:\windows\system32</span><span style="font-size: 10pt; font-family: 微软雅黑">下</span></li></ol></li></ol><ol style="margin-left: 0.75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">打开</span><span style="font-size: 10pt; font-family: 微软雅黑">php.ini</span><span style="font-size: 10pt; font-family: 微软雅黑">文件，查找 extension_dir 有这么一行</span></li></ol><ol style="margin-left: 0.75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">查找short_open_tag = Off，改为</span><span style="font-size: 10pt; font-family: 微软雅黑"> </span><span style="font-size: 10pt; font-family: 微软雅黑">short_open_tag = On</span></li><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">查找display_errors </span><span style="font-size: 10pt; font-family: 微软雅黑">= Off</span><span style="font-size: 10pt; font-family: 微软雅黑">，改为</span><span style="font-size: 10pt; font-family: 微软雅黑"> </span><span style="font-size: 10pt; font-family: 微软雅黑">display_errors</span><span style="font-size: 10pt; font-family: 微软雅黑"> = On</span></li><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">设置时区，查找date.timezone有这么一行</span></li></ol><ol style="margin-left: 0.75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">Apache整合PHP</span><ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">在</span><span style="font-size: 10pt; font-family: 微软雅黑">c:\apache\conf\</span><span style="font-size: 10pt; font-family: 微软雅黑">添加一个文件</span><span style="font-size: 10pt; font-family: 微软雅黑">php-httpd.conf</span><span style="font-size: 10pt; font-family: 微软雅黑">，内容为</span></li></ol></li></ol><ol style="margin-left: 1.125in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">编辑</span><span style="font-size: 10pt; font-family: 微软雅黑">C:\apache\conf\httpd.conf</span></li></ol><ol style="margin-left: 1.125in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">一切配置好后，重新启动</span><span style="font-size: 10pt; font-family: 微软雅黑">apache</span></li></ol><ol style="margin-left: 0.375in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: 微软雅黑; font-size: 10pt"><li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle"><span style="font-size: 10pt; font-family: 微软雅黑">安装</span><span style="font-size: 10pt; font-family: 微软雅黑">FleaPHP</span></li></ol></li><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>请不要将</span><span>apache</span><span>安装到含有空格的目录中。</span></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt">network
 domain ,server name ,email address 均可以随便填</p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>我们这里将</span><span>apahce</span><span>安装到</span><span>C:\apache</span></p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt"><span>装好后启动</span><span>apache</span><span>，在浏览器里访问</span><a href="http://localhost/"><span>http://localhost</span></a><span>，如果看到显示</span><span>&quot;It Works!&quot;</span><span>，表示安装成功。</span></p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt"><span>把</span><span>php\ext</span><span>目录下的</span><span>php_gd2.dll,php_mysql.dll,php_mbstring.dll</span><span>文件复制到</span><span>c:\windows\system32</span><span>下</span></p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">;extension_dir
 = &quot;./&quot;</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">在此行后面加入新行extension_dir
 = &quot;C:\php5\ext&quot;</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">找到</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">extension=php_mbstring.dll</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">extension=php_gd2.dll</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">extension=php_mysql.dl</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">把上面3项前面的分号去掉，这样apache启动时就可以加载这些dll了</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">当然前面我们也把这些dll复制到system32下了</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">;date.timezone
 =</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">将;去掉，改成</p><p style="margin: 0in 0in 0in 0.75in; font-family: 微软雅黑; font-size: 10pt">date.timezone
 = PRC</p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt">LoadModule
 php5_module &quot;c:/php/php5apache2_2.dll&quot;</p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt">AddType
 application/x-httpd-php .php</p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt">PHPIniDir
 &quot;C:/php&quot;</p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt"><span>查找DocumentRoot</span><span> </span><span>&quot;C:</span><span>/a</span><span>pache/htdos&quot;</span></p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt">这就是你网站的根目录，你可以修改，也可以用默认的</p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt">&nbsp;</p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt"><span>查找</span><span>DirectoryIndex index.html index.html.var</span></p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt"><span>修改成DirectoryIndex index.html index.html.var</span><span>&nbsp;&nbsp;index.php
 </span></p><p style="margin: 0in 0in 0in 1.125in; font-family: 微软雅黑; font-size: 10pt">这样index.php
 可以充当默认页面了</p><p style="margin: 0in 0in 0in 0.375in; font-family: 微软雅黑; font-size: 10pt">&nbsp;</p><p style="margin: 0in 0in 0in 0.375in; font-size: 10pt"><span style="font-family: 微软雅黑">将下载的</span><span style="font-family: 微软雅黑">FleaPHP zip</span><span style="font-family: 微软雅黑">包解压到</span><span style="font-family: 微软雅黑">c:\apache\htdos</span><span style="font-family: 微软雅黑">中，输入</span><a href="http://localhost/FleaPHP/"><span style="font-family: Calibri">http://localhost/FleaPHP/</span></a><span style="font-family: 微软雅黑">，可以看到</span><span style="font-family: Calibri">FleaPHP</span><span style="font-family: 微软雅黑">的首页，然后访问</span><a href="http://localhost/FleaPHP/Install/index.php"><span style="font-family: SimSun">http://localhost/FleaPHP/Install/index.php</span></a><span style="font-family: SimSun">，运行安装向导，完成数据库的设置后就可以运行</span><span style="font-family: Calibri">FleaPHP</span><span style="font-family: SimSun">的</span><span style="font-family: Calibri">example</span><span style="font-family: SimSun">了。</span></p>

<p>&nbsp;</p></ol>

    
    

          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/180289#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Apr 2008 21:54:41 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/180289</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/180289</guid>
      </item>
      <item>
        <title>保护视力，还是眼保健操最好</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/168741" style="color:red;">http://jeffreyhsu.javaeye.com/blog/168741</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          平时眼睛不舒服了就点眼药水，时间久了就会有依赖性，效果也不一定很好。<br />我想几乎每个程序员的桌子上都有一瓶润洁之类的吧。<br /><br />这两天右眼非常酸，眼药水都快用了一瓶，也不起作用。<br />后来实在没办法就做眼保健操，坚持了两天，还真管用，一点都不酸了。<br /><br />小学的时候都学过的，当时老师管着都不好好做，没想到现在反倒很自觉，每天做两次，想想还真有意思。<br /><br />建议下载眼保操的录音跟着做，特别推荐“为革命，保护视力”经典版的
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/168741#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 13:33:36 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/168741</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/168741</guid>
      </item>
      <item>
        <title>Google 出bug了？Google Group登录不了</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/166996" style="color:red;">http://jeffreyhsu.javaeye.com/blog/166996</a>&nbsp;
          发表时间: 2008年03月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这两天google的group似乎有些问题，始终登录不了<br /><br />右边原来登录表单现在挤成了一小团。登录进去以后会报一个错误。<br /><br />看来连google也会犯一些低级错误啊
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/166996#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Mar 2008 16:48:52 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/166996</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/166996</guid>
      </item>
      <item>
        <title>合肥人，你怎么就那么爱放炮？</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/163774" style="color:red;">http://jeffreyhsu.javaeye.com/blog/163774</a>&nbsp;
          发表时间: 2008年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          不知从哪个朝代开始，合肥人就有了这个破习俗<br />我想在合肥生活过的人都应该能感受得到吧，根本不是什么节日（合肥人逢阴历双数日子就会放炮，只要是双数天就放炮），经常的就能在大半夜听到鞭炮声，还不是一般的鞭炮，经常是成捆成捆的礼花。<br /><br />今天是元宵节，知道暴风雨又要来临，头天晚上做足准备，喝杯牛奶，早早上床睡觉，紧闭门窗。夜里还是被吵醒了，一看表，3点，然后就没停过，一直到早晨7点半，礼花，鞭炮，烟花，二踢脚，小区里的车也跟着起哄，不知道的还以为台湾打过来了。<br /><br />除了过节放炮，搬家更要放炮。<br />前些天夜里又被吵醒，一看表是凌晨2点，拉开窗户看到小区里一伙人在放大礼花，礼花肆无忌惮的在小区上空炸开，持续了半小时之久，然后又放鞭炮，我都不知道今天又是什么节还是这家人脑子进了开水。我实在忍无可忍，只能报了警即使我知道在合肥报警也是狗屁。<br />    后来投诉小区物业，物业说是搬家表示无权过问，人家是搬家，夜里搬家，“越搬越亮”，合肥的习俗。投诉也是白投诉，物业也是合肥人。<br /><br />表跟我说要什么尊重人家习俗，入乡随俗，放炮是别人的权利。合肥人，你在主张自己权利的同时，有没有考虑过其他人？你搬家非要夜里搬家？搬家非要放礼花？严重扰民又是严重的火灾隐患。<br />为什么这么多年都没有一点改观，我们的消防部门，公安部门，文化部门，民政部门都一点责任没有么？<br /><br />这么多陈风陋习，骨子里的小农作风，还口口声声说搞什么大发展，大跨越，建设国际化都市，简直就是笑话。<br /><br />说什么“花炮之乡”是浏阳，我看，根本合肥才是。
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/163774#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Feb 2008 09:20:31 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/163774</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/163774</guid>
      </item>
      <item>
        <title>发布一首小诗，欢迎补充</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/147699" style="color:red;">http://jeffreyhsu.javaeye.com/blog/147699</a>&nbsp;
          发表时间: 2007年12月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用户体验灭绝人性<br />开发效率惨绝人寰<br />产品报价丧尽天良<br />系统性能人神共愤<br />代码BUG神出鬼没<br />开发文档人模狗样
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/147699#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Dec 2007 09:21:00 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/147699</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/147699</guid>
      </item>
      <item>
        <title>统一eclipse java项目和flexbuilder项目</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/140785" style="color:red;">http://jeffreyhsu.javaeye.com/blog/140785</a>&nbsp;
          发表时间: 2007年11月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <br />
一般情况下，前台(flex)和后台(java)开发人员会在两个项目目录下，两个IDE来开发<br />
但将flex项目和java项目集中到一个项目目录中会有很多好处，客户端程序员和后台开发人员都有一份完整的项目源代码，可以很方便的进行项目的整体构建，项目源码管理也会方便一点。<br />
<br />
当然你的项目目录要好好布局一下，要把flex代码和java代码分开，免得互相混淆<br />
<br />
<br />
FlexBuilder是基于eclipse的IDE，因此它的项目基本配置和标准eclipse项目都是一样的，都是.project文件<br />
打 开.project文件，我们可以看出flex项目和java项目下的buildSpec和natures不同，java项目是 org.eclipse.jdt.core.javabuilder，flex是 com.adobe.flexbuilder.project.flexbuilder<br />
我们把flex和java项目的buildSpec和natures合并就可以统一IDE<br />
合成后的.project会是这样：<br />
<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">projectDescription</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>flexcrm</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">comment</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">comment</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">projects</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">projects</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">buildSpec</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">buildCommand</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>org.eclipse.jdt.core.javabuilder</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">arguments</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">arguments</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">buildCommand</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">buildCommand</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>com.adobe.flexbuilder.project.flexbuilder</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">arguments</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">arguments</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">buildCommand</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">buildSpec</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">natures</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">nature</span><span class="tag">&gt;</span><span>org.eclipse.jdt.core.javanature</span><span class="tag">&lt;/</span><span class="tag-name">nature</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">nature</span><span class="tag">&gt;</span><span>com.adobe.flexbuilder.project.flexnature</span><span class="tag">&lt;/</span><span class="tag-name">nature</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">nature</span><span class="tag">&gt;</span><span>com.adobe.flexbuilder.project.actionscriptnature</span><span class="tag">&lt;/</span><span class="tag-name">nature</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">natures</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">projectDescription</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<br />
另外再把flex项目下的.flexProperties和.actionScriptProperties拷到java项目下<br />
<br />
这样我们可以用FlexBuilder和eclipse打开这同一个项目，这个项目就能在不同的IDE下面同时工作了。
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/140785#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 Nov 2007 10:01:01 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/140785</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/140785</guid>
      </item>
      <item>
        <title>介绍个好玩的小游戏GridWar</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/138615" style="color:red;">http://jeffreyhsu.javaeye.com/blog/138615</a>&nbsp;
          发表时间: 2007年11月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://worldofstuart.excellentcontent.com/grid/wars.htm">http://worldofstuart.excellentcontent.com/grid/wars.htm</a><br />
<br />
几何图形的战争，很炫，很好玩。才3m大小，非常容易上瘾。不需要安装，附件里解压缩就能玩<br />
<br />
游戏支持多种控制方式：键盘，鼠标，混合，摇杆，个人觉得还是混合(hybrid)模式也就是键盘+鼠标的方式最好。<br />
呵呵，目前hard 56万分，推荐大家一试<br />
<br />
<img src="http://worldofstuart.excellentcontent.com/grid/gw1.jpg" alt="" />
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/138615#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 Nov 2007 19:24:50 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/138615</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/138615</guid>
      </item>
      <item>
        <title>采用CXF解决webservice循环引用对象的问题</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/134097" style="color:red;">http://jeffreyhsu.javaeye.com/blog/134097</a>&nbsp;
          发表时间: 2007年10月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本文讨论的是在cxf下如何解决webservice中存在对象循环引用的问题<br />
不说明cxf的用法和spring整合等等,这在官方文档里都有.<br />
<br />
循环引用:<br />
Parent 和 Child是1:n的关系, Parent含有一个child的列表children,child对于parent有一个引用,那这两个对象之间就存在循环引用的关系.<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Parent&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;List&nbsp;children;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;setter&nbsp;/&nbsp;getter</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<div class="code_title">java 代码</div>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;javax.xml.bind.annotation.XmlTransient;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Child&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Parent&nbsp;parent;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@XmlTransient</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;Parent&nbsp;getParent()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;parent;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setParent(Parent&nbsp;parent)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.parent&nbsp;=&nbsp;parent;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;afterUnmarshal(Unmarshaller&nbsp;u,&nbsp;Object&nbsp;parent)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.parent =&nbsp;(Parent)&nbsp;parent;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
这就是一个典型的环引用,而我们不能 直接将带有环的对象暴露给webservice,因为这会导致最终生成xml的时候会陷入死循环最后栈溢出,所以cxf检测出对象存在cycle会抛出一 个异常阻止进一步发布webservice.(以前的XFire可没这么聪明,它没有检测机制,直接就去序列化xml结果会导致 OutOfMemory).<br />
<br />
如何解决呢?就是要破掉这个环,去某一端,如何在不破坏原有设计的情况下做到这一点,就是要使用@XmlTransient<br />
这个annotation会标明这个字段不要解析成xml,所有你不想解析进webservice的都可以通过这个标签来标记<br />
注:cxf默认采用JAXB做databindings,如果要用aegis,相应的就要用@IgnoreProperty这个元注释<br />
像这种情况,我们一般要打破子对父的引用,就是要打破Child对于Parent的引用.注意要在parent的get方法上面加而不是在parent的声明处.<br />
这样从生成的wsdl里面我们就看不到child里有对于parent的引用<br />
<br />
虽然client能够拿到children列表了,但通过child得不到parent的信息,因为在client现在是单向的,那我也想访问parent怎么办?<br />
这里有一个解决办法,在Parent下面加入如下代码:<br />
&nbsp;&nbsp;&nbsp; public void afterUnmarshal(Unmarshaller u, Object parent) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.parent = (Parent) parent;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
怎么做到的?背后的道理是这样的:<br />
循环的双向关系,一端到另一端的关系确定了以后,反过来另一端也就确定了.<br />
cxf在解析wsdl映射成对象的过程中(也就是unmarshal),处理Parent并处理它所包含的child,结果发现parent引 用的child有afterUnmarshal方法,然后把自己的引用通过该方法传递给child,这样child也具有了对于 parent的引用,这一切都是在客户端完成的.真的是很聪明的做法.<br />
<br />
这些功能必须要cxf来做客户端才能实现,但我们可以利用这种技术来在其他客户端实现这个功能.比如flex,.net, php 等等.<br />
<br />
<h3>one more thing</h3>
上面的例子首先访问的是parent,cxf可以拿到两端的信息,但如果先访问child就拿不到parent了.<br />
那么如果把@XmlTransient加到Parent, 同样道理, child可以得到parent的信息,但是这个parent的getChildren里恐怕就只有那一个child了.<br />
<br />
所以还是看具体设计,如果parent需要经常访问child,第一种最好,如果child要经常访问parent,显然是第二种
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/134097#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 21 Oct 2007 22:59:24 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/134097</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/134097</guid>
      </item>
      <item>
        <title>给大家推荐一个非常好用的windows工具SmartStart，我同事写的</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/132690" style="color:red;">http://jeffreyhsu.javaeye.com/blog/132690</a>&nbsp;
          发表时间: 2007年10月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>非常好用的东东，在windows任何地方按 alt + space 弹出搜索框，能快速搜索功能，执行应用程序打开文件夹，可以自定义热键和映射，需要.net 2.0才能运行</p>
<p>安装好后运行，在S图标上按右键，键入 cmd测试一下看能否打开控制台，在S图标上单击右键进入选项修改一些映射和快捷键</p>
<p>进入&ldquo;插件&rdquo;选择&quot;SmartStart.plugin.Mappings&ldquo; 插件选项可以自定义一些文件夹的映射，这样您就可以通过在SmartStart输入快速的进入设定的文件目录，非常方便<br />
</p>
<p><br />
</p>
<p>帮我的同事做个广告，呵呵</p>
<p><br />
</p>
<p>如果你遇到如下情况，下面介绍的工具将非常适合你． </p>
<ol>
    <li>经常在开始菜单里埋头去找一个程序 </li>
    <li>经常在ＩＥ收藏夹里翻了半天才找到一个想去的网站 </li>
    <li>期待一个工具能帮助你更有效率 </li>
</ol>
<br />
<p><img src="http://www.codeplex.com/SS/Project/Download/FileDownload.aspx?DownloadId=17922" alt="v1.5.0.2.JPG" /></p>
<br />
<h4>What is SmartStart? </h4>
<br />
SmartStart is a small tool written with .NET 2.0. It's design to save you time and free you from some annoying but time-consuming work.<br />
<br />
SmartStart is the most efficient way to open files, folders, websites, and programs on your computer, etc... Nobody likes to hunt through the start menu to find an application, just to find that the application that is hidden under some obscure folder. Instead, SmartStart is a smart search program which tries to guess which program or file you are looking for and will launch it when you hit the enter key.
<h4>How to use </h4>
<br />
Use SmartStart is a pleasure thing. Just type some chars and hit the enter key. SmartStart knows what you are looking for.
<h4>Plugins </h4>
<br />
Five plugins available now, we will provide more plugins soon, also you can develop your own plugins to fit your needs.
<ol>
    <li><em>smartstart.plugin.shortcut</em>: use this plugin to let you just type some char to launch an app. </li>
    <li><em>smartstart.plugin.mapping</em>: use this plugin to define your custom shortcut, like: if you define g=http://www.google.com, when you type 'g', http://www.google.com will launched. </li>
    <li><em>smartstart.plugin.Rss</em>: use this plugin to consume rss feeds. </li>
    <li><em>smartstart.plugin.SearchEngine</em>: use this plugin to let you easy switch between search engines. </li>
    <li><em>smartstart.plugin.FileSystemBroswer</em>: use this plugin to easy broswer filesystem. </li>
</ol>
<h4>Skins </h4>
<br />
Three skins available, you can define your custom skin too.
<h4>Help/Feedback </h4>
<br />
Find a bug? Need help? Have a suggestion? Click <a href="http://www.codeplex.com/ss/workitem/create.aspx"><font color="#8c7d18">http://www.codeplex.com/ss/workitem/create.aspx</font></a> to submit your issues or email cofd.li@gmail.com for all your questions or needs.
<h4>How to join us. </h4>
if you are familiar with .Net 2.0, C#, and Windows Form programming, and if you have willingness to join this project to make it a greater tool, you are welcome. Contact me please.<br />
Enioy!
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/132690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Oct 2007 22:50:56 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/132690</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/132690</guid>
      </item>
      <item>
        <title>新出烂片：大话股神</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/126202" style="color:red;">http://jeffreyhsu.javaeye.com/blog/126202</a>&nbsp;
          发表时间: 2007年09月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          真的是很无厘头，很无厘头，不知道花那么多钱拍这种电影干什么<br />
号称是喜剧片，但我都替导演尴尬，就好象一个朋友在你面前费劲说了个一点都不好笑的笑话<br />
<br />
看完片子，我只能说导演必然是一个很严肃的人，一个很严肃的人想拍出无厘头喜剧片只能是一场灾难，影片到处充斥着导演所说的后现代无厘头，夸张的表演却让人觉得那么力不从心，我甚至都能看到演员沮丧尴尬的表情，处处张灯结彩&rdquo;此处是喜剧情节&ldquo;，一点也没了武林外传的自然和流畅。片子里罗家英&lt;国产007&gt;的致敬段子，安在这里实在是让人莫名其妙，周海媚这个过气女星来跑这个龙套也不知道在干什么，彻底可有可无的角色。<br />
<br />
哎，不过我有个优点，无论多烂的片子，我都能把它看完。
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/126202#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 22 Sep 2007 20:20:07 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/126202</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/126202</guid>
      </item>
      <item>
        <title>Crimsonland 血腥大地 survival打到400万分了，个人新记录，哈哈</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/114983" style="color:red;">http://jeffreyhsu.javaeye.com/blog/114983</a>&nbsp;
          发表时间: 2007年08月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一个很有名的超bt平面射击游戏，不知JE有没有人玩<br />
<br />
telekinetic 隔空取物果然是个好技能<br />
以前玩竟然不知道有telekinetic这么个技能，打到物品都是跑过去捡的，hardcore 5.10竟然被我这么死推过去的，想想自己也还真猛啊，回头来看绝对是impossible mission<br />
<br />
停在200万分已经很久了，现在加了telekinetic，破百万就比较轻松了<br />
今天的新记录，用的枪是jackhammer，吼吼<br />
<br />
介绍一些经验：<br />
<br />
1. bug技能，用pulse gun + angry reload，见图3<br />
pulse gun是发射声波的枪，射速极快，无reload时间，angry reload技能是 reload时身体四周发射火焰弹<br />
这把无reload时间的枪和这个技能搭配会有很有趣的事情发生。怎么做？按住鼠标中键（reload键）不放就知道了<br />
<br />
2. 后期靠枪是无用的，要靠物品和运气，100万分以后就只能靠shield, reflex boost, frozen来接力保证活命，100万分后怪物血都很多，只能靠fire&nbsp; 和 bomb来清屏，所以 bonus magnet（大大增加掉宝几率）, bonus economist（延长物品效果时间50%），telekinetic（隔空取物）都是尽早必修的技能。<br />
<br />
3. 几个彩蛋<br />
survival模式中，不开枪不掉血生存60秒，会自动获得一把缩小枪，击中怪物，怪物会变小，挺有意思，不过威力实在太&hellip;&hellip;<br />
credit制作人员表，看到所有带o的字母的单词，用鼠标点一下，该单词会被标亮，全部结束以后会有一个小游戏，玩通过以后会送一把枪（spilt gun），分裂枪，击中怪物会分裂出两颗子弹，以此类推&hellip;&hellip;，这把枪可是需要你通关hardcore才有的奖励。
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/114983#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 21 Aug 2007 20:51:20 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/114983</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/114983</guid>
      </item>
      <item>
        <title>jboss seam 2.0beta1的常见bug列表及解决（持续更新）</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/109652" style="color:red;">http://jeffreyhsu.javaeye.com/blog/109652</a>&nbsp;
          发表时间: 2007年08月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          jboss seam 2.0虽都已经beta版了，但很多bug还是很明显的啊，比如他自己提供的例子都无法通过单元测试，这都敢拿出来，很汗的<br />
（<em>唉，看来seam在 JE相当不受欢迎啊，没几个帖子，连个分类标签都木有</em>）<br />
<br />
下面是一些我在学习工作工程中遇到的一些bug，目前都已解决，特制作个列表方便大家：<br />
<font color="#993300">注：<br />
</font>
<ol>
    <li><font color="#993300">开发环境</font><font color="#993300">: jdk1.6,&nbsp; jboss seam 2.0.0 beta1, Jboss AS 4.2.1, Netbeans5.5.1, Ant1.7<br />
    </font></li>
    <li><font color="#993300">以下所说的项目都是指通过seam gen生成的项目框架，这是推荐的方式</font></li>
    <li><font color="#993300">JBoss AS (Jboss Application Server) 是&nbsp; JBoss 应用服务器简称</font></li>
</ol>
<p><strong><font size="4" color="#333399">一、Seam Gen 生成的项目Jboss AS的路径无法正确生成</font></strong></p>
<div>
<p>&nbsp;&nbsp;&nbsp; 详见<a href="http://jeffreyhsu.javaeye.com/blog/105762"> 另篇文章</a></p>
<p><font color="#333399"><strong><font size="4">二、Java 1.6启动Jboss Server失败</font></strong></font></p>
<p><font color="#333399"><font size="4"><font color="#000000"><font size="2">&nbsp;&nbsp;&nbsp;</font></font></font></font> 该bug同样会影响到SeamTest<font color="#333399"><font size="4"><br />
</font></font></p>
<p>&nbsp;&nbsp;&nbsp; <font face="Comic Sans MS"><font size="3">&nbsp;<strong> <font size="2">1) 现象\异常：</font></strong></font></font></p>
<blockquote>
<p><font face="Comic Sans MS"><br />
<font size="3">
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1"><font><font>
    <li class="alt"><span><span>***&nbsp;CONTEXTS&nbsp;IN&nbsp;ERROR:&nbsp;Name&nbsp;-&gt;&nbsp;Error&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>DeploymentFilter&nbsp;-&gt;&nbsp;java.lang.ClassNotFoundException:&nbsp;[Ljava.lang.String;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>at&nbsp;org.jboss.system.server.profileservice.ProfileServiceBootstrap.checkIncomplete(ProfileServiceBootstrap.java:<span class="number">389</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>at&nbsp;org.jboss.system.server.profileservice.ProfileServiceBootstrap.bootstrap(ProfileServiceBootstrap.java:<span class="number">236</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>at&nbsp;org.jboss.kernel.plugins.bootstrap.AbstractBootstrap.run(AbstractBootstrap.java:<span class="number">89</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>...&nbsp;<span class="number">5</span><span>&nbsp;more&nbsp; <br />
    </span></span></li>
    </font></font></ol>
    </div>
    </font></font></p>
    <font size="3"><font face="Comic Sans MS"></font>     </font></blockquote> <font size="3">    </font>
    <p><font size="3"><font color="#000000" face="Arial"><font size="3">&nbsp;&nbsp;&nbsp; <font size="2"><strong>2) 解决：</strong></font></font></font></font> <font size="3">    </font><br />
    </p>
    <font size="3">    </font><blockquote>
    <div> 下载<a href="http://jira.jboss.com/jira/secure/attachment/12314993/Signature.java"> Signature.java</a>, 编译後覆盖到项目lib/ jboss-embedded-all.jar中的org/jboss/metadata/spi/signature/下同名文件，jboss-seam2.0beta1/lib/jboss-embedded-all.jar也要用此文件替换<font size="3"><font color="#000000" face="Arial"><font size="3"><font size="2"><strong><br />
    </strong></font></font></font><br />
    </font></div>
    <font size="3">    </font></blockquote> <font size="3">    </font>
    <p><font size="3"><strong><font size="4" color="#333399">三、运行Seam 集成测试框架，抛出 service not found的异常</font></strong></font></p>
    <font size="3">    </font>
    <p>&nbsp;&nbsp;&nbsp; Seam提供了非常强大的测试框架，从单元测试到完全脱离容器的可仿用户交互的集成测试，并且非常容易使用，当然如果没有bug的话。</p>
    <p>&nbsp;&nbsp;&nbsp; 用Gavin自己的话说就是<em><font color="#ff6600" face="Comic Sans MS">&quot;You don't need to do anything manually. If you create a new seam-gen project using &quot;seam new-project&quot;, everything is set up exactly right. Just reproduce that structure in your existing project.&quot;</font></em><br />
    </p>
    <font size="3"></font>
    <p><font size="3"><font face="Comic Sans MS"><font face="Arial"><span class="postbody"></span></font><span class="postbody"><font face="Arial">&nbsp;&nbsp;&nbsp; </font></span></font></font>不同很可惜，真的需要to do manully才能工作，并且还挺费事</p>
    <p>jdk1.6得用户在解决了第二条bug后，就该碰到下面的异常了</p>
    <p><font size="3"><font face="Comic Sans MS"><font size="3"><font size="2"><strong>1) 现象：</strong></font></font></font></font></p>
    <font size="3">    </font>
    <p>&nbsp;&nbsp;&nbsp; seam test framework是运行在项目目录下bootstrap目录下的microserver来达到脱离server的目的，该目录是一个微型的jboss server环境</p>
    <p>     </p>
    <div class="code_title">java 代码</div>
    <div class="dp-highlighter">
    <div class="bar">&nbsp;</div>
    <ol class="dp-j" start="1">
        <li class="alt"><span><span>***&nbsp;CONTEXTS&nbsp;IN&nbsp;ERROR:&nbsp;Name&nbsp;-&gt;&nbsp;Error&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
        <li class="alt"><span>jboss.jca:name='jms-ra.rar',service=RARDeployment&nbsp;-&gt;&nbsp;**&nbsp;NOT&nbsp;FOUND&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
        <li class="alt"><span>jboss.jca:name='jboss-local-jdbc.rar',service=RARDeployment&nbsp;-&gt;&nbsp;**&nbsp;NOT&nbsp;FOUND&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.embedded.Bootstrap.checkIncomplete(Bootstrap.java:<span class="number">144</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.embedded.Bootstrap.bootstrapURL(Bootstrap.java:<span class="number">169</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.embedded.Bootstrap.bootstrap(Bootstrap.java:<span class="number">201</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.embedded.Bootstrap.bootstrap(Bootstrap.java:<span class="number">214</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.seam.mock.BaseSeamTest.startJbossEmbeddedIfNecessary(BaseSeamTest.java:<span class="number">919</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.seam.mock.BaseSeamTest.init(BaseSeamTest.java:<span class="number">856</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jboss.seam.mock.SeamTest.init(SeamTest.java:<span class="number">42</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>...&nbsp;Removed&nbsp;<span class="number">22</span><span>&nbsp;stack&nbsp;frames&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class=""><span>SKIPPED&nbsp;CONFIGURATION:&nbsp;<span class="annotation">@BeforeMethod</span><span>&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>SKIPPED&nbsp;CONFIGURATION:&nbsp;<span class="annotation">@AfterMethod</span><span>&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class=""><span>SKIPPED&nbsp;CONFIGURATION:&nbsp;<span class="annotation">@AfterClass</span><span>&nbsp;cleanup&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>SKIPPED:&nbsp;testStartOver&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    </ol>
    </div>
    <br />
    <p><br />
    <font size="3"><font size="2"><strong><font color="#000000" face="Arial">&nbsp;&nbsp;&nbsp; 2) 解决：</font></strong></font></font><font face="Arial"><br />
    </font></p>
    <font face="Arial">    <font size="3">    </font></font><blockquote><font face="Arial">这是因为seam bootstrap缺少了三个非常重要的.rar文件，jboss-local-jdbc.rar, jboss-xa-jdbc.rar, jms-ra.rar<br />
    导致必需的服务无法加载<br />
    这三个包在Jboss AS / server / default / deploy下可以找到(jms-ra.rar在deploy/jms中)，拷贝到bootstrap/deploy<font size="3"><font color="#000000" face="Arial"><br />
    <span class="postbody"><span style="font-weight: bold;"></span></span></font></font>并且也要拷贝到jboss-seam2.0beta1/boostrap内<font size="3"><font color="#000000" face="Arial"><span class="postbody"><br />
    </span></font></font>     <font size="3">    </font></font></blockquote><font face="Arial"> <font size="3">    </font>     </font>
    <p><span class="postbody"></span><font face="Arial"><font size="3"><font face="Comic Sans MS"><font color="#339966"><font color="#339966"></font></font></font></font></font></p>
    <p><font size="3"><strong><font size="3" color="#333399">四、</font><font color="#333399">异常：java.util.MissingResourceException: Can't find bundle for base name javax.el.LocalStrings</font></strong><br />
    <font face="Comic Sans MS"><font size="3"><font size="2"><strong>&nbsp;&nbsp;&nbsp; 1) 现象：</strong></font></font></font></font><br />
    </p>
    <blockquote><br />
    <p>     </p>
    <div class="code_title">java 代码</div>
    <div class="dp-highlighter">
    <ol class="dp-j" start="1">
        <li class="alt"><span><span>javax.el.ELException:&nbsp;java.util.MissingResourceException:&nbsp;Can't&nbsp;find&nbsp;bundle&nbsp;</span><span class="keyword">for</span><span>&nbsp;base&nbsp;name&nbsp;javax.el.LocalStrings,&nbsp;locale&nbsp;en_US&nbsp;&nbsp;</span></span></li>
        <li class=""><span>at&nbsp;org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:<span class="number">329</span><span>)&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>at&nbsp;org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:<span class="number">338</span><span>)&nbsp;&nbsp;</span></span></li>
        <li class=""><span>....&nbsp; <br />
        </span></li>
    </ol>
    </div>
    <span class="postdetails"></span>
    <p>&nbsp;</p>
    </blockquote><font size="3"><font size="2"><strong><font color="#000000" face="Arial">&nbsp;&nbsp;&nbsp; 2) 解决：<br />
    </font></strong></font></font><blockquote>下载 <a href="http://jira.jboss.com/jira/secure/attachment/12314878/LocalStrings.properties">LocalStrings.properties</a> 添加到 项目和jboss-seam2.0beta1/ lib内的jboss-el-api.jar&nbsp; javax/el/中。<br />
    <br />
    </blockquote><font size="3"><strong><font size="3" color="#333399">五、Seam-gen 生成 Netbeans项目问题</font><font color="#333399"><br />
    </font></strong></font><blockquote>     详见<a href="http://jeffreyhsu.javaeye.com/blog/109731">另篇blog</a></blockquote></div>
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/109652#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 07 Aug 2007 15:07:00 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/109652</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/109652</guid>
      </item>
      <item>
        <title>在Netbeans下开发Jboss-seam</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/109731" style="color:red;">http://jeffreyhsu.javaeye.com/blog/109731</a>&nbsp;
          发表时间: 2007年08月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Jboss seam 的Seam-gen提供了很好的项目生成工具，可以生成eclipse和netbeans的项目配置，因为全程采用ant构建，小组内可以同时使用eclipse和netbeans开发，非常方便。<br />
<br />
如何在eclipse下开发seam，jboss的官方文档里已有说明。<br />
本文讨论如何在NetBeans下开发Seam。因为seam均是java ee的技术，netbeans毫无疑问对java ee支持是最好的，所以推荐采用netbeans<br />
本文采用版本：NetBeans IDE 5.5.1, JBoss Seam 2.0.0 beta1，Ant 1.6+<br />
<br />
<ol>
    <li><strong>使用seam-gen生成项目</strong><br />
    在jboss-seam目录下运行seam setup根据提示设定一些项目参数，然后运行seam new-project生成项目骨架<br />
    详细请见官方文档<br />
    <br />
    </li>
    <li><strong>新建NetBeans项目<br />
    </strong>文件 -&gt; 打开，然后打开刚刚新建立的项目，下面需要做一些设定<br />
    <br />
    </li>
    <li><strong>设定项目，修正seam-gen bug</strong><br />
    打开项目我们可以看到源码目录src/下面有三个包 src/action, src/test, src/model，实际上这分别是三个独立的源码目录树，但是seam-gen有bug（看来jboss的确不喜欢netbeans），生成的netbeans源码路径不正确，netbeans把三个源码目录当成三个包了，我们需要手动修改一下，右键单击项目 -&gt; 属性 -&gt; Java源代码 设定正确的源包文件夹，src/test要设定在测试包文件夹内。<br />
    然后为项目添加lib库，项目属性 -&gt; Java源代码类路径 -&gt; 添加JAR/文件夹，把lib库里的jar全部添加进来，为每一个源包文件夹（src/action, src/test, src/model）都添加同样的lib<br />
    <br />
    </li>
    <li><strong>下载facelet插件</strong><br />
    因为seam采用的是facelet而非jsp开发JSF页面（强烈推荐使用facelet），需要下载相关插件使netbeans支持facelet开发，下载 <a href="https://nbfaceletssupport.dev.java.net/">facelet netbeans pluggin</a> 然后安装该插件： 工具 -&gt; 更新中心 -&gt; 手动安装下载的模块<br />
    <br />
    </li>
    <li><strong>编译运行<br />
    </strong>首先在netbeans里安装Jboss AS服务器，这里采用的是Jboss AS 4.2.1<br />
    方法是进入 运行环境 -&gt; 右键单机 服务器节点 -&gt; 添加服务器<br />
    选择Jboss AS的安装目录，设定好以后打开刚刚添加的jboss AS的属性对话框，在平台 -&gt; VM选项里填入<br />
    <font color="#ff6600">-Xms512m -Xmx900m -XX:PermSize=256m -XX:MaxPermSize=512</font>，这是因为ejb3有个潜在的bug，就是短时间内deploy几次后会很有可能出现内存溢出的异常，通过把堆栈内存设大一些可以解决<br />
    因为seam-gen项目采用ant构建项目，所以不能像普通的web项目那样在直接在IDE里右键运行项目。NetBeans相比eclipse方便的地方就是它能够映射build里的target到项目的构建任务里，就好像操作一个普通项目一样。右键单机项目你可以看到&ldquo;清理项目，生成项目，部署项目，测试项目&rdquo;等等快捷任务，很人性化，也可以自己修改每个任务映射的ant target是什么。而eclipse对于ant项目就不行，右键菜单里的按钮都是定死的。这也是推荐netbeans的另一个原因。<br />
    <br />
    启动JBoss AS，然后右键单击项目的部署项目，片刻后就可以访问了，开发阶段更改文件重新部署仍然选择&ldquo;部署项目&rdquo;<br />
    seam的ant任务会刷新ear的时间戳，强制jboss server重新加载而不用重新启动服务器</li>
</ol>
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/109731#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 07 Aug 2007 15:02:28 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/109731</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/109731</guid>
      </item>
      <item>
        <title>忘掉金山词霸，推荐一款免费小巧的词霸软件 - 灵格斯词霸</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/105806" style="color:red;">http://jeffreyhsu.javaeye.com/blog/105806</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我想金山词霸应该是每个开发者都必装的软件吧，但有几个是正版的呢？<br />
<br />
金山词霸越来越霸了，启动慢占资源，并且每次一不小心就给你安装一堆不需要的东西<br />
最重要的是还是收费软件<br />
<br />
<a href="http://www.lingoes.cn/zh/index.html">灵格斯词霸</a>，就像他的名字一样，轻盈灵巧（仅1.9M)，运行十分快速，界面清新，完全免费，没有不实用的功能和插件。官网上也有很多的词库可供扩展安装，安装极为方面，强烈推荐使用。<br />
<br />
安装辞典的时候请注意，安装好词典後，把 &quot;加入索引 add to index&quot;选中，不然搜索单词的时候，左边的索引无法应用新的词库，会不显示搜到的单词。<br />
安装好词库後，也可以在词库的设置里增加/去除 词库的索引设置
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/105806#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 16:56:02 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/105806</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/105806</guid>
      </item>
      <item>
        <title>jboss seam 中 seam gen的关于设置jboss AS路径的bug</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/105762" style="color:red;">http://jeffreyhsu.javaeye.com/blog/105762</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          按照最新的jboss-seam-2.0-beta1的参考文档<br />
<br />
seam setup，用来设置一些基本的参数，JBoss AS的安装路径，数据库连接等等，首次设定好以后，以后就可以据此来生成项目。<br />
但是设定好后运行后续命令explode，发现jboss as的路径设置不起作用，不管怎么改，都指向到了/Application/JBossAS...下面，后来检查发现，<strong>生成的项目目录里build.properties里还有一个jboss.home的属性，把这里改正确了就可以了。</strong><br />
<br />
这是seam gen的一个bug，大家请注意。<br />
<br />
虽然Gavin King宣称seam gen绝不比 rails的功能差，但个人感觉还是不很方便，除去上面那么明显的bug<br />
seam的命令都是针对一个项目的，在前面seam setup好以后（也可以直接修改seam-gen目录下build.properties），后面的命令都会按照setup里设定的包名，数据库连接等等执行。但是你一旦切换工作的项目，就比较麻烦了，seam没有分别为项目保存参数，每次切换项目，都要重新设定一堆参数：项目名称，包名，数据库连接&hellip;&hellip;，很烦人，不然就不能正常工作<br />
比如生成action，如果你切换了项目，但gen配置里设置的还是上一个项目的包名，这样生成出来的actionBean就被package到了上一个项目的包名里&hellip;&hellip;<br />
<font color="#ff6600"><em> 因为seam gen不是读取项目里的配置，而是读取jboss-seam/seam-gen目录下build.properties里的内容，而这是所有项目共享的，所以每切换一次项目，自然就要改一次</em></font><br />
<br />
也许我还没有详细的了解seam的gen，但目前就我所在文档里看到的，就是这样的情况
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/105762#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 14:23:49 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/105762</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/105762</guid>
      </item>
      <item>
        <title>老外也都上易趣、穿李宁？</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/101513" style="color:red;">http://jeffreyhsu.javaeye.com/blog/101513</a>&nbsp;
          发表时间: 2007年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &ldquo;你在易趣有一个账户叫白马王子217吗？&quot;擎天柱一个字一个字无比清晰的问sam -- 全国热播的big片，变形金刚配音版<br />
原来老外也是用易趣的，翻译的本土化做得不错，虽然在中国，把ebay替换成易趣倒也无可厚非，但听起来着实别扭。<br />
如果要是换成淘宝，那就不象话了，定会招来ebay的一顿官司，人家可是花了那么多钱买通擎天柱和霸天虎的：）<br />
<br />
另外我相信在大坝基地那出&rdquo;一切皆有可能&ldquo;原意肯定也是impossible is nothing 阿迪达斯的广告词，不知道咋到了中国就本土化成了李宁的了。我想就算是adidas想打官司也是有苦说不出吧，因为李宁的广告词本来就是盗版来的，两句话就是一个意思，本来就是意译，只不过凑巧李宁的广告词也叫这个嘛，不知道广告语是不是受法律保护，反正&rdquo;李宁&ldquo;在营销上是足够聪明的。<br />
<br />
迈克尔贝也知道今生今世是摆脱不了焰火导演的帽子了，索性也就不要什么剧情深度啦，直接炸到底，广告做的也是赤裸裸，丝毫不演示，甚至直接作为片子的笑料处理。
          <br/>
          <span style="color:red;">
            <a href="http://jeffreyhsu.javaeye.com/blog/101513#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jul 2007 11:10:00 +0800</pubDate>
        <link>http://jeffreyhsu.javaeye.com/blog/101513</link>
        <guid>http://jeffreyhsu.javaeye.com/blog/101513</guid>
      </item>
      <item>
        <title>在eclipse项目中使用maven管理依赖</title>
        <author>JeffreyHsu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jeffreyhsu.javaeye.com">JeffreyHsu</a>&nbsp;
          链接：<a href="http://jeffreyhsu.javaeye.com/blog/98480" style="color:red;">http://jeffreyhsu.javaeye.com/blog/98480</a>&nbsp;
          发表时间: 2007年07月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-family: 宋体;">本文所介绍内容不使用任何</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">插件，经测试适用最新版的</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">欧罗巴</span>
<p class="MsoNormal"><span style="font-family: 宋体;">概览:</span></p>
<ul>
    <li><span style="font-family: 宋体;"></span>     <span style="font-family: 宋体;"></span><span lang="EN-US" style="font-family: Wingdings;"><span style=""><span new="" font-style:="" font-stretch:="" font-size:="" times="" font-weight:="" line-height:="" roman="" font-size-adjust:="" style="" font-variant:=""></span></span></span><font color="#333399"><span style="font-family: 宋体;">如何导入</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">项目至</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中</span></font>     <font color="#333399"><span style="font-family: 宋体;"><br />
    </span></font></li>
</ul>
<ul>
    <li><font color="#333399"><span style="font-family: 宋体;">建立自有</span><span lang="EN-US">Maven<span style="">&nbsp; </span>Java</span><span style="font-family: 宋体;">类库服务器</span></font>     <font color="#333399"><span style="font-family: 宋体;"><br />
    </span></font></li>
</ul>
<ul>
    <li><font color="#333399"><span style="font-family: 宋体;">建立符合</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">代码库标准的自定义类库</span></font></li>
</ul>
<p class="MsoNormal"><em><span lang="EN-US">Maven</span><span style="font-family: 宋体;">在管理</span><span lang="EN-US">Java</span><span style="font-family: 宋体;">类库方面有巨大的优势，像白衣所说就是非常&ldquo;环保&rdquo;。</span></em></p>
<p class="MsoNormal"><em><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 我们平时用</span><span lang="EN-US">IDE</span><span style="font-family: 宋体;">开发都是把所需要的类库一股脑的全丢到项目目录下，然后全部添加到</span><span lang="EN-US">ide</span><span style="font-family: 宋体;">的构建路径中，如果用了</span><span lang="EN-US">SVN/CVS</span><span style="font-family: 宋体;">，这样会很容易就把这些庞大的类库提交到代码库中，如果是</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">项目，光类库可能就有百兆，严重影响</span><span lang="EN-US">checkout</span><span style="font-family: 宋体;">速度，如果是远程开发就不敢想象了。而引入</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">来管理依赖，就可以很好的控制依赖项的版本，并且项目中不存在具体依赖</span><span lang="EN-US">lib</span><span style="font-family: 宋体;">，只有对于依赖的描述，来源也可以很好的集中控制。</span></em></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">我们的项目在</span><span lang="EN-US">eclipse wtp</span><span style="font-family: 宋体;">下开发，而项目的依赖我用</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">来管理，并且同时也不影响</span><span lang="EN-US">wtp</span><span style="font-family: 宋体;">的正常使用，以下是整合</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">和</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">的方法和步骤，关于</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">的使用这里不做介绍，相关的文档网上有很多，本文仅做简单介绍：</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">以一个</span><span lang="EN-US">webapp</span><span style="font-family: 宋体;">项目</span><span lang="EN-US">my-webapp</span><span style="font-family: 宋体;">为例</span>     <span style="font-family: 宋体;"><br />
</span></p>
<p class="MsoNormal"><strong><font size="3"><span style="font-family: 宋体;">1. 建立支持</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">的</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">项目</span></font></strong></p>
<p class="MsoListParagraph" style="margin-left: 21pt; text-indent: 0cm;"><span style="font-family: 宋体;">首先用</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">来建立标准布局的</span><span lang="EN-US">webapp</span><span style="font-family: 宋体;">项目，然后用</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">生成</span><span lang="EN-US">eclipse wtp</span><span style="font-family: 宋体;">项目配置信息，再用</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">导入即可</span></p>
<p class="MsoListParagraph" style="margin-left: 21pt; text-indent: 0cm;"><span style="font-family: 宋体;">下面先说说第一种：</span><span style="font-family: 宋体;"><br />
</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: 0cm;"><span style="font-family: 宋体;">1.1 生成</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">项目</span><br />
<strong style=""><span style="font-family: 宋体;">生成标准布局的</span><span lang="EN-US">webapp</span></strong><strong style=""><span style="font-family: 宋体;">项目</span></strong><span style="font-family: 宋体;">，在控制台执行下面命令</span><span lang="EN-US">(groupId</span><span style="font-family: 宋体;">后面是包名，</span><span lang="EN-US">artifactId</span><span style="font-family: 宋体;">后面是项目名称</span><span lang="EN-US">)</span><span style="font-family: 宋体;">：</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 21pt; text-align: left;"><span lang="EN-US" style="color: blue;">mvn archetype:create -DgroupId=net.jeffrey <br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="">&nbsp;&nbsp;&nbsp;&nbsp; </span>-DartifactId=my-webapp<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="">&nbsp;&nbsp;&nbsp;&nbsp; </span>-DarchetypeArtifactId=maven-archetype-webapp<o:p></o:p></span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 21pt; text-align: left;"><strong style=""><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 生成标准布局的普通</span><span lang="EN-US">java</span></strong><strong style=""><span style="font-family: 宋体;">项目</span></strong><span style="font-family: 宋体;">，执行：</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 21pt; text-align: left;"><span lang="EN-US" style="color: blue;">mvn archetype:create -DgroupId=net.jeffrey -DartifactId=my-app<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: 0cm;"><span style="font-family: 宋体;">完成后你会看到已经生成了一个名为</span><span lang="EN-US">my-webapp</span><span style="font-family: 宋体;">的文件夹，这就是刚刚生成好的项目目录</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: 0cm;"><span style="font-family: 宋体;">在</span><span lang="EN-US">my-webapp</span><span style="font-family: 宋体;">根目录下，你会看到名为</span><span lang="EN-US">pom.xml</span><span style="font-family: 宋体;">的文件，这个就是</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">的项目描述文件</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span lang="EN-US" style="color: blue;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">编辑</span><span lang="EN-US">pom</span><span style="font-family: 宋体;">配置项目所需依赖，例如下面</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span style="font-family: 宋体;">
<div class="code_title">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">dependencies</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">dependency</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>org.springframework</span><span class="tag"><!--</span--><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>spring</span><span class="tag"><!--</span--><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>2.0</span><span class="tag"><!--</span--><span class="tag-name">version</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">scope</span><span class="tag">&gt;</span><span>compile</span><span class="tag"><!--</span--><span class="tag-name">scope</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">dependency</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;<span class="tag"><!--</span--><span class="tag-name">dependencies</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
<br />
</div>
<br />
</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Maven</span><span style="font-family: 宋体;">的代码库是这样的目录结构，</span><span lang="EN-US">groupId</span><span style="font-family: 宋体;">是该类库所属的组织，作为文件目录，包名结构映射成目录结构，</span><span lang="EN-US">artifactId</span><span style="font-family: 宋体;">就是具体的类库名称了，是</span><span lang="EN-US">groupId</span><span style="font-family: 宋体;">的一个子目录，</span><span lang="EN-US">version</span><span style="font-family: 宋体;">是版本号，每个版本都有一个单独的目录，里面放置的就是具体的</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">包。</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span style="font-family: 宋体;">比如</span><span lang="EN-US">spring-2.0.jar</span><span style="font-family: 宋体;">在</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">代码库中的路径就是</span><span lang="EN-US">org/springframework/spring/2.0/spring-2.0.jar</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span style="font-family: 宋体;">关于依赖的写法，可以去这里查询：</span><span lang="EN-US" style=""><a href="http://mvnrepository.com/">http://mvnrepository.com/</a></span><span style="font-family: 宋体;"><br />
</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span style="font-family: 宋体;">1.2&nbsp; 生成</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">项目</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span style="font-family: 宋体;">在控制台下进入项目目录，如果是从</span><strong style=""><span lang="EN-US">maven webapp</span></strong><strong style=""><span style="font-family: 宋体;">项目生成</span><span lang="EN-US">eclipse wtp</span></strong><span style="font-family: 宋体;">，执行：</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span lang="EN-US">mvn &ndash;Dwtpversion=1.0 eclipse:eclipse</span><span style="font-family: 宋体;">（</span><span lang="EN-US">wtp1.0</span><span style="font-family: 宋体;">以上版本均可用）</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span style="font-family: 宋体;">普通</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">项目执行：</span><span lang="EN-US">mvn eclipse:eclipse</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span style="font-family: 宋体;">然后在</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中</span><span lang="EN-US">import</span><span style="font-family: 宋体;">项目即可</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span style="font-family: 宋体;">1.3&nbsp; 在</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中设置</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">路径变量</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span style="font-family: 宋体;">刚导入的项目上会有错误标记，不用担心，因为还没有设置</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">的类库变量</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span style="font-family: 宋体;">打开项目的属性框，在</span><span lang="EN-US">Java Build Path</span><span style="font-family: 宋体;">里我们可以看到项目依赖类库的路径都已经给自动设置好了</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span style="font-family: 宋体;"><img src="http://www.javaeye.com/topics/download/ae2edd83-fadd-4eb0-8e08-bb9ce87b988b" alt="" /><br />
</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span lang="EN-US" style=""><v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t">  <v:stroke joinstyle="miter">  <v:formulas>   <v:f eqn="if lineDrawn pixelLineWidth 0">   <v:f eqn="sum @0 1 0">   <v:f eqn="sum 0 0 @1">   <v:f eqn="prod @2 1 2">   <v:f eqn="prod @3 21600 pixelWidth">   <v:f eqn="prod @3 21600 pixelHeight">   <v:f eqn="sum @0 0 1">   <v:f eqn="prod @6 1 2">   <v:f eqn="prod @7 21600 pixelWidth">   <v:f eqn="sum @8 21600 0">   <v:f eqn="prod @7 21600 pixelHeight">   <v:f eqn="sum @10 21600 0">  </v:f>  <v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t">  <o:lock v:ext="edit" aspectratio="t"> </o:lock><v:shape o:spid="_x0000_i1025" id="图片_x0020_0" type="#_x0000_t75" alt="demo_buildpath.jpg" style="width: 338.25pt; height: 384.75pt; visibility: visible;">  <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg" o:title="demo_buildpath"> </v:imagedata></v:shape></v:path></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas></v:stroke></v:shapetype></span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 42pt; text-align: left; text-indent: 0cm;"><span style="font-family: 宋体;">下面设置</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">的路径变量</span><span lang="EN-US">M2_REPO</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Window -&gt; Preferences -&gt; Java -&gt; Build Path -&gt; Classpath Variables</span><span style="font-family: 宋体;">，</span><span lang="EN-US">New</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Name</span><span style="font-family: 宋体;">命名为</span><span lang="EN-US">M2_REPO</span><span style="font-family: 宋体;">，路径为你的本地的</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">类库地址，这里为</span><span lang="EN-US">C:/Documents and Settings/jeffrey/.m2/repository</span><span style="font-family: 宋体;">，设置成功后重新编译，发现项目的错误标记已经消除了，至此，</span><span lang="EN-US">eclipse</span><span lang="EN-US" style="">项目已经导入成功了</span></p>
<p class="MsoListParagraph" align="left" style="margin-left: 49.6pt; text-align: left; text-indent: -1cm;"><span lang="EN-US" style=""><span style="font-family: 宋体;">1.4&nbsp; 为项目添加新的依赖</span></span></p>
<p class="MsoNormal" align="left" style="margin-left: 42pt; text-align: left;"><span style="font-family: 宋体;">编辑</span><span lang="EN-US">pom</span><span style="font-family: 宋体;">文件，添加新的</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;">dependency</span><span style="font-size: 10pt; font-family: 宋体; color: rgb(63, 127, 127);">，</span><span style="font-family: 宋体;">保存後</span></p>
<p class="MsoNormal" align="left" style="margin-left: 42pt; text-align: left;"><span style="font-family: 宋体;">在控制台分别执行：</span></p>
<p class="MsoNormal" align="left" style="margin-left: 42pt; text-align: left;"><span lang="EN-US">mvn eclipse:clean </span></p>
<p class="MsoNormal" align="left" style="margin-left: 42pt; text-align: left;"><span lang="EN-US">mvn -Dwtpversion=1.0 eclipse:eclipse</span></p>
<p class="MsoListParagraph" style="margin-left: 49.6pt; text-indent: -1cm;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 在</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中刷新项目即可看到新的依赖项已经添加到</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">项目中</span></p>
<p class="MsoListParagraph" style="margin-left: 49.6pt; text-indent: -1cm;"><span style="font-family: 宋体;">1.5 非</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">标准的项目布局</span></p>
<p class="MsoListParagraph" style="margin-left: 42.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">前面已经介绍了如何新建一个</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">项目并导入到</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中，但对于已有的</span><span lang="EN-US">wtp</span><span style="font-family: 宋体;">项目，其项目布局是不符合</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">方式的（</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">下</span><span lang="EN-US">wtp</span><span style="font-family: 宋体;">项目</span><span lang="EN-US">web</span><span style="font-family: 宋体;">目录在项目根目录下</span><span lang="EN-US">WebContent</span><span style="font-family: 宋体;">，</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">布局是在</span><span lang="EN-US">src/main/webapp</span><span style="font-family: 宋体;">），这就不能直接通过</span><span lang="EN-US">eclipse:eclipse</span><span style="font-family: 宋体;">来生成</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">的依赖</span></p>
<p class="MsoListParagraph" style="margin-left: 42.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">但可以通过改写项目</span><span lang="EN-US">pom</span><span style="font-family: 宋体;">文件来指定源码目录和测试源码目录：</span></p>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">build</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">finalName</span><span class="tag">&gt;</span><span>my-webapp</span><span class="tag"><!--</span--><span class="tag-name">finalName</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">sourceDirectory</span><span class="tag">&gt;</span><span>src</span><span class="tag"><!--</span--><span class="tag-name">sourceDirectory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">testSourceDirectory</span><span class="tag">&gt;</span><span>test</span><span class="tag"><!--</span--><span class="tag-name">testSourceDirectory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">build</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
<br />
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: -21.25pt;"><font color="#808000"><span style="font-family: 宋体;">对于</span><span lang="EN-US">web</span><span style="font-family: 宋体;">根目录，还没有什么好办法来特别指定，如果哪位朋友知道，麻烦指教。</span></font></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: -21.25pt;"><strong><font size="3"><span style="font-family: 宋体;">2.&nbsp; 建立</span><span lang="EN-US">Maven2</span><span style="font-family: 宋体;">的本地代码库服务器，也就是常说的&ldquo;私服&rdquo;</span></font></strong></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-family: 宋体;">官方的</span><span lang="EN-US">maven repository</span><span style="font-family: 宋体;">服务器特别的慢，还记得上次海底电缆事故么？官方的服务器根本就无法访问，那段时间简直要抓狂。并且官方服务器类库版本通常不是最新，有时候想用最新版的还得自己动手。（下面会介绍如何自己动手做），所以建立一个自己的本地代码服务器对于整个团队就特别有意义。</span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span lang="EN-US">Maven</span><span style="font-family: 宋体;">的服务器很简单，一个普通的</span><span lang="EN-US">http</span><span style="font-family: 宋体;">服务器就行，比如</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">，装好</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">以后。</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span style="font-family: 宋体;">将你本地代码库文件夹拷贝到</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">安装目录下</span><span lang="EN-US">htpdocs/maven2</span><span style="font-family: 宋体;">，</span><span lang="EN-US">windows</span><span style="font-family: 宋体;">用户是</span><span lang="EN-US">C:\Documents and Settings\jeffrey\.m2\repository</span><span style="font-family: 宋体;">，</span><span lang="EN-US">linux</span><span style="font-family: 宋体;">下是</span><span lang="EN-US"> /home/Jeffrey/.m2/repository</span><span style="font-family: 宋体;">（注意</span><span lang="EN-US">.m2</span><span style="font-family: 宋体;">在</span><span lang="EN-US">linux</span><span style="font-family: 宋体;">下是隐藏文件夹）</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span style="font-family: 宋体;">启动</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">服务器，在浏览器中输入</span><span lang="EN-US"><a href="http://localhost/maven2/repository">http://localhost/maven2/repository</a></span><span style="font-family: 宋体;">，应该可以查看到</span><span lang="EN-US">repository</span><span style="font-family: 宋体;">的文件目录</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span style="font-family: 宋体;">编辑项目</span><span lang="EN-US">pom</span><span style="font-family: 宋体;">，指定本地的代码库服务器</span></p>
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span style="font-family: 宋体;">在</span><span lang="EN-US">project</span><span style="font-family: 宋体;">中加入：</span></p>
&nbsp;&nbsp;&nbsp;
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">repositories</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">repository</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>mylibs</span><span class="tag"><!--</span--><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>http://localhost/maven2/repository</span><span class="tag"><!--</span--><span class="tag-name">url</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">repository</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">repositories</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
<br />
<p class="MsoNormal" align="left" style="margin-left: 21pt; text-align: left;"><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-family: 宋体;">可以加入多个</span><span lang="EN-US">repository</span><span style="font-family: 宋体;">，</span><span lang="EN-US">mvn</span><span style="font-family: 宋体;">会按照顺序检索，如果都没有找到，最后会去找官方的服务器</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: -21.25pt;"><strong><font size="3"><span lang="EN-US" style=""><o:p>&nbsp;</o:p></span><span style="font-family: 宋体;">3. 添加新的类库到本地代码服务器中</span></font></strong></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">在</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">官网有很多类库都找不到，只能自己动手，丰衣足食。</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">请先确认官网确实没有的情况下再自己做，毕竟还是挺麻烦的</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">可在以下两个网站查阅：</span><span lang="EN-US"><a href="http://mvnrepository.com/">http://mvnrepository.com/</a></span><span style="font-family: 宋体;">，</span><span lang="EN-US">http://repo1.maven.org/maven2/</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">前面已经说明了</span><span lang="EN-US">maven</span><span style="font-family: 宋体;">代码库的文件目录组织方式，同一个</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">对于每个版本都有一个独立的文件夹来存放，除了</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">还要有该</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">的描述文件</span><span lang="EN-US">.pom</span><span style="font-family: 宋体;">，以及他们的校验文件</span><span lang="EN-US">.sh1</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: 0cm;"><span lang="EN-US">.pom</span><span style="font-family: 宋体;">文件里定义了该</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">的名称、版本以及该</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">所依赖到的其他</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">（这也就是为什么引入一个</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">却带出一大堆的</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">来）</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt; text-indent: 0cm;"><span style="font-family: 宋体;">最简单的</span><span lang="EN-US">pom</span><span style="font-family: 宋体;">如下：</span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt;"><span lang="EN-US"></span></p>
<p class="MsoListParagraph" style="margin-left: 21.25pt;"><span lang="EN-US">
<project> </project>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">project</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">modelVersion</span><span class="tag">&gt;</span><span>4.0.0</span><span class="tag"><!--</span--><span class="tag-name">modelVersion</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>net.jeffrey</span><span class="tag"><!--</span--><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>xxx</span><span class="tag"><!--</span--><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>1.0</span><span class="tag"><!--</span--><span class="tag-name">version</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">dependencies</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">dependencies</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">project</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">为</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">和</span><span lang="EN-US">pom</span><span style="font-family: 宋体;">生成校验文件</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></sp