﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-太阳雨-随笔分类-个人经验</title><link>http://www.blogjava.net/sy1214520/category/32340.html</link><description>痛并快乐着</description><language>zh-cn</language><lastBuildDate>Mon, 02 Jul 2012 21:04:04 GMT</lastBuildDate><pubDate>Mon, 02 Jul 2012 21:04:04 GMT</pubDate><ttl>60</ttl><item><title>在Eclipse中设置中文JavaDOC (备)</title><link>http://www.blogjava.net/sy1214520/archive/2010/04/29/319715.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Thu, 29 Apr 2010 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2010/04/29/319715.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/319715.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2010/04/29/319715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/319715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/319715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2010/04/29/319715.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/319715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2010-04-29 17:33 <a href="http://www.blogjava.net/sy1214520/archive/2010/04/29/319715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse8.5汉化</title><link>http://www.blogjava.net/sy1214520/archive/2010/04/28/319642.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Wed, 28 Apr 2010 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2010/04/28/319642.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/319642.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2010/04/28/319642.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/319642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/319642.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2010/04/28/319642.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/319642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2010-04-28 21:51 <a href="http://www.blogjava.net/sy1214520/archive/2010/04/28/319642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse反编译插件--Jode Decompiler</title><link>http://www.blogjava.net/sy1214520/archive/2010/02/01/311454.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Mon, 01 Feb 2010 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2010/02/01/311454.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/311454.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2010/02/01/311454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/311454.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/311454.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2010/02/01/311454.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/311454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2010-02-01 09:32 <a href="http://www.blogjava.net/sy1214520/archive/2010/02/01/311454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse快捷键列表</title><link>http://www.blogjava.net/sy1214520/archive/2009/07/14/286668.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 14 Jul 2009 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2009/07/14/286668.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/286668.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2009/07/14/286668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/286668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/286668.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 直接从Eclipse SDK的快捷键帮助里面copy下来的，贴出来玩。                                    类型                                    功能说明                                    快捷键                  ...&nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2009/07/14/286668.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/286668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2009-07-14 12:00 <a href="http://www.blogjava.net/sy1214520/archive/2009/07/14/286668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse中10个比较有用的快捷键组合 </title><link>http://www.blogjava.net/sy1214520/archive/2009/07/04/285433.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Fri, 03 Jul 2009 21:42:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2009/07/04/285433.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/285433.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2009/07/04/285433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/285433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/285433.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2009/07/04/285433.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/285433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2009-07-04 05:42 <a href="http://www.blogjava.net/sy1214520/archive/2009/07/04/285433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Iframe跨域访问的问题</title><link>http://www.blogjava.net/sy1214520/archive/2009/02/27/257022.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Fri, 27 Feb 2009 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2009/02/27/257022.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/257022.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2009/02/27/257022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/257022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/257022.html</trackback:ping><description><![CDATA[<p>Iframe跨域访问的问题，困扰了我两三天</p>
<p>1.框架的Iframe 自动适应高度的问题.</p>
<p>2.Iframe框架包含的页面提交到服务器的session 丢失的问题.</p>
<p>&nbsp;</p>
<p>解决办法.</p>
<p>1. 在iframe包含的页面 加上 </p>
<p>&lt;script language="javascript"&gt;document.domain=<a href="http://www.域名.com/">www.域名.com</a>;&lt;/script&gt;</p>
<p>2.在iframe 保航的页面服务器(resin)写一个filter 设置一下返回的((HttpServletResponse)response).setHeader("P3P","CP=CAO PSA OUR");</p>
<p>&nbsp;</p>
<p>这样就可以解决以上两个问题了..</p>
<img src ="http://www.blogjava.net/sy1214520/aggbug/257022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2009-02-27 14:37 <a href="http://www.blogjava.net/sy1214520/archive/2009/02/27/257022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat6下应用太多出现java.lang.OutOfMemoryError: PermGen space</title><link>http://www.blogjava.net/sy1214520/archive/2009/01/07/250301.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Wed, 07 Jan 2009 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2009/01/07/250301.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/250301.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2009/01/07/250301.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/250301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/250301.html</trackback:ping><description><![CDATA[今天在部署应用的时候，发现Tomcat报错：java.lang.OutOfMemoryError: PermGen space，第一感觉就是Tomcat内存分配的太小了。上网Google了一把发现了一堆资料，就不多说了，大家可以自己查。下面主要说我的解决办法。<br />
先说我的机器的环境：<br />
cpu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 双核2.66GHz * 2<br />
内存&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8G&nbsp; <br />
操作系统&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Win2003<br />
<br />
修改Tomcat\bin\catalina.bat文件。<br />
找到set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"这句话。在前面加上rem注释掉。<br />
在它下面加入：<br />
set JAVA_OPTS=-server -Xms1024m -Xmx1024m -Xss512k -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true<br />
重新启动Tomcat，正常启动了
<img src ="http://www.blogjava.net/sy1214520/aggbug/250301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2009-01-07 11:46 <a href="http://www.blogjava.net/sy1214520/archive/2009/01/07/250301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j使用方法收藏</title><link>http://www.blogjava.net/sy1214520/archive/2008/11/10/239764.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Mon, 10 Nov 2008 15:47:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/11/10/239764.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/239764.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/11/10/239764.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/239764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/239764.html</trackback:ping><description><![CDATA[<p>为什么要用日志（Log）?<br />
这个&#8230;&#8230;就不必说了吧。</p>
<p>为什么不用System.out.println()?<br />
功能太弱；不易于控制。如果暂时不想输出了怎么办？如果想输出到文件怎么办？如果想部分输出怎么办？&#8230;&#8230;</p>
<p>为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一？<br />
Commons-loggin的目的是为&#8220;所有的Java日志实现&#8221;提供一个统一的接口，它自身的日志功能平常弱（只有一个简单的SimpleLog?），所以一般不会单独使用它。</p>
<p>Log4j的功能非常全面强大，是目前的首选。我发现几乎所有的Java开源项目都会用到Log4j，但我同时发现，所有用到Log4j的项目一般也同时会用到commons-loggin。我想，大家都不希望自己的项目与Log4j绑定的太紧密吧。另外一个我能想到的&#8220;同时使用commons-logging和Log4j&#8221;的原因是，简化使用和配置。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 强调一点，&#8220;同时使用commons-logging和Log4j&#8221;，与&#8220;单独使用Log4j&#8221;相比，并不会带来更大的学习、配置和维护成本，反而更加简化了我们的工作。我想这也是为什么&#8220;所有用到Log4j的项目一般也同时会用到commons-loggin&#8221;的原因之一吧。</p>
<p><br />
&nbsp;</p>
<p><br />
Commons-logging能帮我们做什么？<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供一个统一的日志接口，简单了操作，同时避免项目与某个日志实现系统紧密a耦合</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很贴心的帮我们自动选择适当的日志实现系统（这一点非常好！）</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它甚至不需要配置</p>
<p><br />
&nbsp;</p>
<p><br />
这里看一下它怎么&#8220;&#8216;很贴心的&#8217;帮我们&#8216;自动选择&#8217;&#8216;适当的&#8217;日志实现系统&#8221;：</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先在classpath下寻找自己的配置文件commons-logging.properties，如果找到，则使用其中定义的Log实现类；</p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果找不到commons-logging.properties文件，则在查找是否已定义系统环境变量org.apache.commons.logging.Log，找到则使用其定义的Log实现类；</p>
<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否则，查看classpath中是否有Log4j的包，如果发现，则自动使用Log4j作为日志实现类；</p>
<p>4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否则，使用JDK自身的日志实现类（JDK1.4以后才有日志实现类）；</p>
<p>5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否则，使用commons-logging自己提供的一个简单的日志实现类SimpleLog；</p>
<p>（以上顺序不保证完全准确，请参考官方文档）</p>
<p><br />
&nbsp;</p>
<p><br />
可见，commons-logging总是能找到一个日志实现类，并且尽可能找到一个&#8220;最合适&#8221;的日志实现类。我说它&#8220;很贴心&#8221;实际上是因为：1、可以不需要配置文件；2、自动判断有没有Log4j包，有则自动使用之；3、最悲观的情况下也总能保证提供一个日志实现（SimpleLog）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以看到，commons-logging对编程者和Log4j都非常友好。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了简化配置commons-logging，一般不使用commons-logging的配置文件，也不设置与commons-logging相关的系统环境变量，而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融合。如果不想用Log4j了怎么办？只需将classpath中的Log4j的Jar包删除即可。</p>
<p>就这么简单！</p>
<p>代码应该怎么写？<br />
我们在需要输出日志信息的&#8220;每一人&#8221;类中做如下的三个工作：</p>
<p>1、导入所有需的commongs-logging类：</p>
<p>import org.apache.commons.logging.Log;</p>
<p>&nbsp;</p>
<p>import org.apache.commons.logging.LogFactory;</p>
<p>&nbsp;</p>
<p>如果愿意简化的话，还可以两行合为一行：</p>
<p>import org.apache.commons.logging.*;</p>
<p>&nbsp;</p>
<p><br />
&nbsp;</p>
<p><br />
2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员：</p>
<p>private static Log log = LogFactory.getLog(YouClassName.class);</p>
<p>&nbsp;</p>
<p>注意这里定义的是static成员，以避免产生多个实例。</p>
<p>LogFactory.getLog()方法的参数使用的是当前类的class，这是目前被普通认为的最好的方式。为什么不写作LogFactory.getLog(this.getClass())？因为static类成员访问不到this指针！</p>
<p><br />
&nbsp;</p>
<p><br />
3、使用org.apache.commons.logging.Log类的成员方法输出日志信息：</p>
<p>log.debug("111");</p>
<p>&nbsp;</p>
<p>log.info("222");</p>
<p>&nbsp;</p>
<p>log.warn("333");</p>
<p>&nbsp;</p>
<p>log.error("444");</p>
<p>&nbsp;</p>
<p>log.fatal("555");</p>
<p>&nbsp;</p>
<p>这里的log，就是上面第二步中定义的类成员变量，其类型是org.apache.commons.logging.Log，通过该类的成员方法，我们就可以将不同性质的日志信息输出到目的地（目的地是哪里？视配置可定，可能是stdout，也可能是文件，还可能是发送到邮件，甚至发送短信到手机&#8230;&#8230;详见下文对log4j.properties的介绍）：</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug()&nbsp;&nbsp; 输出&#8220;调试&#8221;级别的日志信息；</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出&#8220;信息&#8221;级别的日志信息；</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; warn()&nbsp;&nbsp;&nbsp; 输出&#8220;警告&#8221;级别的日志信息；</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error()&nbsp;&nbsp;&nbsp;&nbsp; 输出&#8220;错误&#8221;级别的日志信息；</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fatal()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出&#8220;致命错误&#8221;级别的日志信息；</p>
<p>根据不同的性质，日志信息通常被分成不同的级别，从低到高依次是：&#8220;调试（DEBUG）&#8221;&#8220;信息（INFO）&#8221;&#8220;警告（WARN）&#8221;&#8220;错误（ERROR）&#8221;&#8220;致命错误（FATAL）&#8221;。为什么要把日志信息分成不同的级别呢？这实际上是方便我们更好的控制它。比如，通过Log4j的配置文件，我们可以设置&#8220;输出&#8216;调试&#8217;及以上级别的日志信息&#8221;（即&#8220;调试&#8221;&#8220;信息&#8221;&#8220;警告&#8221;&#8220;错误&#8221;&#8220;致命错误&#8221;），这对项目开发人员可能是有用的；我们还可以设置&#8220;输出&#8220;警告&#8221;及以上级别的日志信息&#8221;（即&#8220;警告&#8221;&#8220;错误&#8221;&#8220;致命错误&#8221;），这对项目最终用户可能是有用的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅从字面上理解，也可以大致得出结论：最常用的应该是debug()和info()；而warn()、error()、fatal()仅在相应事件发生后才使用。</p>
<p>&nbsp;</p>
<p><br />
从上面三个步骤可以看出，使用commons-logging的日志接口非常的简单，不需要记忆太多东西：仅仅用到了两个类Log, LogFactory，并且两个类的方法都非常少（后者只用到一个方法，前者经常用到的也只是上面第三步中列出的几个），同时参数又非常简单。</p>
<p>上面所介绍的方法是目前被普通应用的，可以说是被标准化了的方法，几乎所有的人都是这么用。如果不信，或想确认一下，就去下载几个知名的Java开源项目源代码看一下吧。</p>
<p><br />
下面给出一个完整的Java类的代码：</p>
<p><br />
package liigo.testlog;<br />
&nbsp;</p>
<p><br />
import org.apache.commons.logging.Log;</p>
<p>import org.apache.commons.logging.LogFactory;</p>
<p><br />
public class TestLog</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; private static Log log = LogFactory.getLog(TestLog.class);<br />
&nbsp;&nbsp;&nbsp; public void test()</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("111");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("222");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.warn("333");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("444");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.fatal("555");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><br />
&nbsp;</p>
<p><br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestLog testLog = new TestLog();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testLog.test();</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>&nbsp;</p>
<p><br />
只要保证commons-logging的jar包在classpath中，上述代码肯定可以很顺利的编译通过。那它的执行结果是怎么样的呢？恐怕会有很大的不同，请继续往下看。</p>
<p><br />
Log4j在哪里呢？它发挥作用了吗？<br />
应该注意到，我们上面给出的源代码，完全没有涉及到Log4j——这正是我们所希望的，这也正是commons-logging所要达到的目标之一。</p>
<p>可是，怎么才能让Log4j发挥它的作用呢？答案很简单，只需满足&#8220;classpath中有Log4j的jar包&#8221;。前面已经说过了，commons-logging会自动发现并应用Log4j。所以只要它存在，它就发挥作用。（它不存在呢？自然就不发挥作用，commons-logging会另行选择其它的日志实现类。）</p>
<p>&nbsp;</p>
<p><br />
注意：配置文件log4j.properties对Log4j来说是必须的。如果classpath中没有该配置文件，或者配置不对，将会引发运行时异常。</p>
<p><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样，要正确地应用Log4j输出日志信息，log4j.properties的作用就很重要了。好在该文件有通用的模板，复制一份（稍加修改）就可以使用。几乎每一个Java项目目录内都会有一个log4j.properties文件，可下载几个Java开源项目源代码查看。本文最后也附一个模板性质的log4j.properties文件，直接复制过去就可以用，或者根据自己的需要稍加修改。后文将会log4j.properties文件适当作一些介绍。</p>
<p><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里顺便提示一点：如果不用commons-logging，仅仅单独使用Log4j，操作上反而要稍微麻烦一些，因为Log4j需要多一点点的初始化代码（相比commons-logging而言）：</p>
<p>import org.apache.log4j.Logger;</p>
<p>&nbsp;</p>
<p>import org.apache.log4j.PropertyConfigurator;</p>
<p>&nbsp;</p>
<p>public class TestLog4j {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; static Logger logger = Logger.getLogger(TestLog4j.class); //First step</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; public static void main(String args[]) {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyConfigurator.configure("log4j.properties"); //Second step</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Here is some DEBUG"); //Third step</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Here is some INFO");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.warn("Here is some WARN");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("Here is some ERROR");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.fatal("Here is some FATAL");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>}</p>
<p>不过也就多出一行。但这至少说明，引用commons-logging并没有使问题复杂化，反而简单了一些。在这里1+1就小于2了。这也验证了前面的结论。</p>
<p>总结<br />
将commons-logging和Log4j的jar包都放置到classpath下，同时也将Log4j的配置文件放到classpath中，两者就可以很好的合作。</p>
<p><br />
采用Log4j配合commons-logging作为日志系统，是目前Java领域非常非常流行的模式，使用非常非常的普遍。两者的结合带来的结果就是：简单 + 强大。</p>
<p>commons-logging提供了简捷、统一的接口，不需要额外配置，简单；</p>
<p>Log4j功能非常全面、强大；</p>
<p>commons-logging仅仅对Log4j(当然还包括其它LOG实现)作了一层包装，具体的日志输出还是在内部转交给身后的Log4j来处理；而Log4j虽然做了所有的事情，却甘作绿叶，从不以真身示人。</p>
<p>两者堪称绝配。</p>
<p><br />
对log4j.properties的一点介绍<br />
下面对log4j.properties文件内容作一点点介绍，以后文所附log4j.properties文件为例：</p>
<p>除去以#开头的注释以及空行，第一行有用的内容是：</p>
<p>log4j.rootLogger = DEBUG, CONSOLE,A1</p>
<p>log4j.rootLogger是最最重要的一个属性了，它定义日志信息的&#8220;输出级别&#8221;和&#8220;输出目的地&#8221;。</p>
<p>关键看&#8220;=&#8221;后面的值，&#8220;DEBUG, CONSOLE,A1&#8221;这里我们要把它分成两部分：第一个逗号之前的是第一部分，指定&#8220;输出级别&#8221;；后面的是第二部分，指定&#8220;输出目的地&#8221;。可以同时指定多个&#8220;输出目的地&#8221;，以逗号隔开。</p>
<p>具体到上面这一行：它指定的&#8220;输出级别&#8221;是&#8220;DEBUG&#8221;；它指定的&#8220;输出目的地&#8221;是&#8220;CONSOLE&#8221;和&#8220;A1&#8221;。</p>
<p>注意：</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;输出级别&#8221;有可选的五个值，分别是DEBUG、INFO、WARN、ERROR、FATAL，它们是由Log4j系统定义的。</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;输出目的地&#8221;就是我们自己定义的了，就在log4j.properties的后面部分，此文件定义的&#8220;输出目的地&#8221;有CONSOLE、FILE、ROLLING_FILE、SOCKET、LF5_APPENDER、MAIL、DATABASE、A1、im。该文件之所以可作主模板，就是因为它比较全面地定义了各种常见的输出目的地（控制台、文件、电子邮件、数据库等）。</p>
<p>好，下面详细解释&#8220;log4j.rootLogger=DEBUG, CONSOLE,A1&#8221;这一行：</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定&#8220;输出级别&#8221;是&#8220;DEBUG&#8221;，即，仅输出级别大于等于&#8220;调试（DEBUG）&#8221;的日志信息。如果此处指定的是&#8220;WARN&#8221;则仅调用warn()、error()、fatal()方法输出的日志信息才被输出到&#8220;输出目的地&#8221;，而调用debug()、info()方法输出的日志信息不被输出到&#8220;输出目的地&#8221;。明白了吗？Log4j就是以这种方式来过滤控制日志信息的输出与否，这也是对日志信息进行级别分类的目的。</p>
<p>&nbsp;</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定&#8220;输出目的地&#8221;是&#8220;CONSOLE&#8221;和&#8220;A1&#8221;，即，将指定的日志信息（根据日志级别已进行了过滤）同时输出到的&#8220;控制台&#8221;和&#8220;SampleMessages.log4j文件&#8221;。</p>
<p><br />
为什么说&#8220;CONSOLE&#8221;表示将日志信息输出到&#8220;控制台&#8221;呢？那就要看一下后文的定义了：</p>
<p># 应用于控制台 </p>
<p>&nbsp;</p>
<p>log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender </p>
<p>&nbsp;</p>
<p>log4j.appender.Threshold=DEBUG </p>
<p>&nbsp;</p>
<p>log4j.appender.CONSOLE.Target=System.out </p>
<p>&nbsp;</p>
<p>log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout </p>
<p>&nbsp;</p>
<p>log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p>#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n </p>
<p><br />
为什么说&#8220;A1&#8221;表示将日志信息输出到&#8220;SampleMessages.log4j文件&#8221;呢？还要看后文的定义：</p>
<p>&nbsp;</p>
<p>log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender </p>
<p>log4j.appender.A1.File=SampleMessages.log4j </p>
<p>&nbsp;</p>
<p>log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' </p>
<p>&nbsp;</p>
<p>log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout </p>
<p>&nbsp;</p>
<p>注意：这里的定义没有指定输出文件的路径，它的路径实际上是 java.user.path的值。<br />
&nbsp;</p>
<p><br />
您应该已经注意到，在定义&#8220;输出目的地&#8221;时，还可以指定日志格式、时间、布局等相关信息。略过。</p>
<p><br />
好了，我可以根据需要，将这一行修改为：</p>
<p>log4j.rootLogger = ERROR, CONSOLE,FILE,MAIL</p>
<p>&nbsp;</p>
<p>将&#8220;错误（ERROR）&#8221;及&#8220;致命错误（FATAL）&#8221;级别的日志信息同时输出到控制台、文件，并且发电子邮件向系统管理员报告。是不是很爽？（如果将&#8220;调试（DEBUG）&#8221;级别的日志信息邮件给管理员，恐怕迟早会把他/她的邮箱涨爆，哪怕用的是Gmail！再次理解了&#8220;将日志信息分为不同级别&#8221;的意图了吧？）</p>
<p>&nbsp;</p>
<p><br />
附：一个有用的log4j.properties文件模板<br />
##Log4J的配置之简单使它遍及于越来越多的应用中了</p>
<p>##Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。</p>
<p>##此文件（log4j.properties）内容来自网络，非本文作者liigo原创。</p>
<p><br />
log4j.rootLogger=DEBUG, CONSOLE,A1</p>
<p>log4j.addivity.org.apache=true </p>
<p>&nbsp;</p>
<p><br />
# 应用于控制台 </p>
<p><br />
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender </p>
<p>log4j.appender.Threshold=DEBUG </p>
<p>log4j.appender.CONSOLE.Target=System.out </p>
<p>log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p>#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n </p>
<p>&nbsp;</p>
<p><br />
#应用于文件 </p>
<p><br />
&nbsp;<br />
log4j.appender.FILE=org.apache.log4j.FileAppender </p>
<p>log4j.appender.FILE.File=file.log </p>
<p>log4j.appender.FILE.Append=false </p>
<p>log4j.appender.FILE.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p># Use this layout for LogFactor 5 analysis </p>
<p><br />
# 应用于文件回滚 </p>
<p><br />
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender </p>
<p>log4j.appender.ROLLING_FILE.Threshold=ERROR </p>
<p>log4j.appender.ROLLING_FILE.File=rolling.log </p>
<p>log4j.appender.ROLLING_FILE.Append=true </p>
<p>log4j.appender.ROLLING_FILE.MaxFileSize=10KB </p>
<p>log4j.appender.ROLLING_FILE.MaxBackupIndex=1 </p>
<p>log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p><br />
#应用于socket </p>
<p>log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender </p>
<p>log4j.appender.SOCKET.RemoteHost=localhost </p>
<p>log4j.appender.SOCKET.Port=5001 </p>
<p>log4j.appender.SOCKET.LocationInfo=true </p>
<p># Set up for Log Facter 5 </p>
<p>log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n </p>
<p><br />
# Log Factor 5 Appender </p>
<p>log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender </p>
<p>log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 </p>
<p><br />
# 发送日志给邮件 </p>
<p><br />
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender </p>
<p>log4j.appender.MAIL.Threshold=FATAL </p>
<p>log4j.appender.MAIL.BufferSize=10 </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#77;&#65;&#73;&#76;&#46;&#70;&#114;&#111;&#109;&#61;&#119;&#101;&#98;&#64;&#119;&#119;&#119;&#46;&#119;&#117;&#115;&#101;&#116;&#46;&#99;&#111;&#109;">log4j.appender.MAIL.From=web@www.wuset.com</a> </p>
<p>log4j.appender.MAIL.SMTPHost=www.wusetu.com </p>
<p>log4j.appender.MAIL.Subject=Log4J Message </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#77;&#65;&#73;&#76;&#46;&#84;&#111;&#61;&#119;&#101;&#98;&#64;&#119;&#119;&#119;&#46;&#119;&#117;&#115;&#101;&#116;&#117;&#46;&#99;&#111;&#109;">log4j.appender.MAIL.To=web@www.wusetu.com</a> </p>
<p>log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p><br />
# 用于数据库 </p>
<p>log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender </p>
<p>log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test </p>
<p>log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver </p>
<p>log4j.appender.DATABASE.user=root </p>
<p>log4j.appender.DATABASE.password= </p>
<p>log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') </p>
<p>log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p><br />
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender </p>
<p>log4j.appender.A1.File=SampleMessages.log4j </p>
<p>log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' </p>
<p>log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout </p>
<p><br />
#自定义Appender </p>
<p><br />
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender </p>
<p><br />
log4j.appender.im.host = mail.cybercorlin.net </p>
<p>log4j.appender.im.username = username </p>
<p>log4j.appender.im.password = password </p>
<p>log4j.appender.im.recipient = <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#111;&#114;&#108;&#105;&#110;&#64;&#99;&#121;&#98;&#101;&#114;&#99;&#111;&#114;&#108;&#105;&#110;&#46;&#110;&#101;&#116;">corlin@cybercorlin.net</a> </p>
<p><br />
log4j.appender.im.layout=org.apache.log4j.PatternLayout </p>
<p>log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p><br />
# 结束</p>
<img src ="http://www.blogjava.net/sy1214520/aggbug/239764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-11-10 23:47 <a href="http://www.blogjava.net/sy1214520/archive/2008/11/10/239764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven创建项目报错的问题</title><link>http://www.blogjava.net/sy1214520/archive/2008/11/10/239757.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Mon, 10 Nov 2008 15:25:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/11/10/239757.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/239757.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/11/10/239757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/239757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/239757.html</trackback:ping><description><![CDATA[<div class="postText">
<h2><span style="color: #000000">今天碰见一到一个很郁闷的事情，当使用mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app来创建一个新项目时，有时候会出现以下错误：解决过程如下：</span></h2>
<div class="postbody">
<p>[INFO] Scanning for projects...<br />
[INFO] Searching repository for plugin with prefix: 'archetype'.<br />
[INFO]<br />
----------------------------------------------------------------------------<br />
[INFO] Building Maven Default Project<br />
[INFO]&nbsp;&nbsp;&nbsp; task-segment: [archetype:create] (aggregator-style)<br />
[INFO]<br />
----------------------------------------------------------------------------<br />
。。。。。。。<br />
[INFO] Velocimacro : initialization complete.<br />
[INFO] Velocity successfully started.<br />
[INFO] [archetype:create]<br />
[INFO] Defaulting package to group ID: com.mycompany.app<br />
[INFO]<br />
------------------------------------------------------------------------<br />
[ERROR] BUILD ERROR<br />
[INFO]<br />
------------------------------------------------------------------------<br />
[INFO] Failed to resolve artifact.</p>
<p><span style="color: red">GroupId: org.apache.maven.archetypes<br />
ArtifactId: maven-archetype-quickstart<br />
Version: RELEASE</span></p>
<p><span style="color: red">Reason: Unable to determine the release version</span></p>
<p><span style="color: #0000ff">Try downloading the file manually from the project website.</span></p>
<p><span style="color: #0000ff">Then, install it using the command:<br />
&nbsp;&nbsp;&nbsp; mvn install:install-file -DgroupId=org.apache.maven.archetypes<br />
-DartifactId=maven-arch<br />
etype-quickstart \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file</span></p>
<p>&nbsp; org.apache.maven.archetypes:maven-archetype-quickstart:jar:RELEASE</p>
<p>&nbsp;[INFO]<br />
------------------------------------------------------------------------<br />
[INFO] For more information, run Maven with the -e switch<br />
[INFO]<br />
------------------------------------------------------------------------<br />
[INFO] Total time: 1 second<br />
[INFO] Finished at: Tue Apr 17 07:08:50 MDT 2007<br />
[INFO] Final Memory: 4M/8M<br />
[INFO]<br />
------------------------------------------------------------------------</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请注意红色部分为错误产生的根本原因，&nbsp; <span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>maven<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还处于开发过程中，开发方极有可能已经更新某个</span>plug-in<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的版本，但本地</span>plug-in <span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>metadata<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有版本的信息或者没有最新版本的信息，致使</span>maven<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无法下载正确的版本。同时请注意蓝色部分，这是提示的解决办法。具体步骤如下：<br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;1.打开网址：<a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/">http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;2.选择最新版本并且下载最新的&#8220;<a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0-alpha-4/maven-archetype-quickstart-1.0-alpha-4.jar">maven-archetype-quickstart-1.0-alpha-4.jar</a> &#8221;文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.安装这个archetype到maven本地仓库。使用命令如下：<span style="font-family: 宋体">mvn install:install-file -DgroupId=org.apache.maven.archtypes -Dar<br />
tifactId=maven-archetype-quickstart -Dversion=1.0-alpha-4 -Dpackaging=jar -Dfile=c:\7000\maven\maven-archetype-quickstart-1.0-alpha-4.jar。注意-Dfile是刚下载的文件的路径。<br />
&nbsp;&nbsp;&nbsp;&nbsp;现在在cmd中执行mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app就可以创建新项目了。</span></span></span></div>
</div>
<img src ="http://www.blogjava.net/sy1214520/aggbug/239757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-11-10 23:25 <a href="http://www.blogjava.net/sy1214520/archive/2008/11/10/239757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解压版Tomcat配置为服务，自测试成功</title><link>http://www.blogjava.net/sy1214520/archive/2008/11/04/238615.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 04 Nov 2008 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/11/04/238615.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/238615.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/11/04/238615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/238615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/238615.html</trackback:ping><description><![CDATA[<font size="4">一 配置JDK<br />
1、下载jdk(<span style="color: red">这个不需要多说了，能看到这篇文章的人都会吧</span>)<br />
下载后，解压，假设为d:\JAVATOOLS\JDK6，要确保bin目录在这个目录里，下面的JAVA_HOME即为此目录d:\JAVATOOLS\JDK6.<br />
2、配置系统变量<br />
(1) 右键单击&#8220;我的电脑&#8221;，选择&#8220;属性&#8221;－&#8220;高级&#8221;，点击&#8220;环境变量&#8221;。<br />
(2) 在&#8220;系统变量&#8221;框中，点击&#8220;新建&#8221;按钮，&#8220;变量名&#8221;填写&#8220;JAVA_HOME&#8221;，变量值填写jdk解压后所在的目录。<br />
继续添加CLASSPATH变量值为&#8220;.;%JAVA_HOME%\lib\tool.jar;%JAVA_HOME%\lib\rt.jar;&#8221;<br />
(3) 在&#8220;用户变量&#8221;框下面点击&#8220;新建&#8221;按钮，&#8220;变量名&#8221;填&#8220;PATH&#8221;，&#8220;变量值&#8221;填写%PATH%;%JAVA_HOME%\bin；<br />
&nbsp;<br />
二 配置Tomcat<br />
1、下载Tomcat Zip压缩包，解压。<br />
2、修改startup.bat文件：<br />
在第一行前面加入如下两行－－<br />
SET JAVA_HOME=(<span style="color: red">JDK目录</span>)<br />
SET CATALINA_HOME=(<span style="color: red">前面解压后Tomcat的目录</span>)<br />
如果需要使用shutdown.bat关闭服务器的话，也按照上面加入两行。<br />
3、这样，运行startup.bat就可以运行服务器，运行shutdown.bat就可以关闭服务器了。<br />
&nbsp;<br />
三 将Tomcat加入服务<br />
1、修改bin目录中的service.bat:<br />
添加下面这些代码：<br />
-----------------------------------------------------------------------------<br />
REM 添加下面的一行<br />
set CATALINA_HOME=(<span style="color: red">前面解压后Tomcat的目录</span>)<br />
REM 如果从来没有安装过Tomcat，或者保证Services.msc启动服务管理器检查没有Apache Tomcat系统服务，到此你就可以转到第REM 二步了。否则继续往下走<br />
REM 按照描述修改下面的几行<br />
set SERVICE_NAME=Tomcat5<br />
REM 上面一行，Tomcat5修改成你需要的服务名，这个将是一后使用net start/stop来操作的服务名称。<br />
set PR_DISPLAYNAME=Apache Tomcat<br />
REM 上面一行，Apache Tomcat改为你需要的显示服务名，这个将显示在服务管理器中。<br />
set PR_DESCRIPTION=Apache Tomcat Server - http://jakarta.apache.org/tomcat<br />
REM 这一行改不改无所谓，是服务的描述，根据自己的喜好决定吧。<br />
-----------------------------------------------------------------------------<br />
<br />
2、运行cmd打开控制台，进入Tomat目录/bin文件夹，输入如下命令运行。<br />
service.bat install<br />
程序提示：The service 'Tomcat5（或者你修改一后的SERVICE_NAME）' has been installed<br />
说明服务Tomcat已经被安装成功。<br />
顺便说一下，运行service.bat remove可以移除服务。<br />
3、到这里，服务添加成功，运行services.msc，可以看到添加的服务，默认状态下该服务是手动运行的，在他的属性中，将启动类型更改为&#8220;自动&#8221;，以后机器启动以后Tomcat就在后台启动了。<br />
&nbsp;<br />
四 控制台控制服务的命令<br />
启动服务<br />
net Start 服务名<br />
关闭服务<br />
net stop 服务名<br />
注：<br />
1 此服务名可以是SERVICE_NAME，也可以是PR_DISPLAYNAME;<br />
2 如果服务名中包含空格或者中文，请将服务名用半角双引号包含起来。<br />
&nbsp;<br />
最后，预祝第一次配置顺利。<br />
</font>
<img src ="http://www.blogjava.net/sy1214520/aggbug/238615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-11-04 15:43 <a href="http://www.blogjava.net/sy1214520/archive/2008/11/04/238615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>添加xml文件自动提示方法，以spring配置文件为例</title><link>http://www.blogjava.net/sy1214520/archive/2008/06/23/210173.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Mon, 23 Jun 2008 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/06/23/210173.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/210173.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/06/23/210173.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/210173.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/210173.html</trackback:ping><description><![CDATA[<p>用eclipse，在导入相应的包后（有人说不导包也有提示，因为默认的eclipse导入了jdk的包），eclipse会有代码提示功能。<br />
那么XML文件能不能也这样呢？其实也是可以的，只不过导包的地方不一样。下面以spring为例（虽然Myeclipse6.5中已经集成了，这里只是示范说明）。<br />
<br />
进入：window -&gt; Preference... -&gt; MyEclipse -&gt; Editors -&gt; XML -&gt;XML Catalog</p>
<p>选择：选中&#8220;User Specified Entries&#8221;，点击&#8220;Add...&#8221;按钮</p>
<p>填入：</p>
<p>URI: 请选择本地文件系统上SPRING_HOME\dist\resources\spring-beans-2.0.xsd 文件<br />
Key Type: 选择Schema Location<br />
Key: http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</p>
<p>点击确定</p>
<p>将spring配置文件关闭再重新打开即可。可以使用MyEclipse XML Editor打开这些xml文件。</p>
<img src ="http://www.blogjava.net/sy1214520/aggbug/210173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-06-23 22:29 <a href="http://www.blogjava.net/sy1214520/archive/2008/06/23/210173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse中集成jad反编译</title><link>http://www.blogjava.net/sy1214520/archive/2008/06/20/209371.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Fri, 20 Jun 2008 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/06/20/209371.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/209371.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/06/20/209371.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/209371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/209371.html</trackback:ping><description><![CDATA[<p>很早就听说过eclipse可以集成jad，一直没有试过，一直用的小颖和一个叫java decompiler （具体名字记不住了），不过还是没有集成到eclipse中，每次查看源码的时候，还需要找到相应的class文件才可以反编译，比较麻烦，毕竟很多class都是在jar包中，而且路径很深。昨天闲来无聊，随便找了找eclipse集成jad的反编译工具，很简单，过程如下：<br />
需要两个东东<br />
Jadclips插件，网址：<a href="http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download">http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download</a><br />
Jad反编译工具，网址：<a href="http://www.kpdus.com/jad.html#download">http://www.kpdus.com/jad.html#download</a><br />
注意下载的时候认准版本。我下载的是<a class="external text" title="http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.3.0.jar?download" href="http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.3.0.jar?download" rel="nofollow">net.sf.jadclipse_3.3.0.jar</a> 和<a href="http://www.kpdus.com/jad/winnt/jadnt158.zip">Jad 1.5.8g for Windows 9x/NT/2000 on Intel platform</a>。<br />
<br />
开始具体的配置<br />
<br />
Jad下载后解压，然后将解压后的jad.exe文件复制到%JAVA_HOME%\BIN目录下面（可以将jad.exe随便放到哪，记住路径，下面在eclipse配置中要用到）。</p>
<p>直接将<a class="external text" title="http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.3.0.jar?download" href="http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.3.0.jar?download" rel="nofollow">net.sf.jadclipse_3.3.0.jar</a> 复制到eclipse的plugins目录下。<br />
个人认为这样比较简单，如果大家喜欢把自己的plugins拿出来放到一个单独的文件夹，可以自己google，这里不做过多介绍。<br />
<br />
然后启动eclipse，打开：Window-&gt;Preferences-&gt;Java-&gt;JadClipse<br />
<br />
1、Path to decompiler，这里设置反编译工具jad的全路径名，比如：%JAVA_HOME%\bin\jad.exe。 就是刚才jad解压的路径，例如在我的电脑中的路径就是C:\Program Files\Java\jdk1.5.0_13\bin\jad.exe。<br />
<br />
2、Directory for temporary files，这里设置临时文件路径，无所谓了。<br />
<br />
至于Window-&gt;Preferences-&gt;Java-&gt;JadClipse目录下的Debug，Directives，Formatting，Misc目录中的参数设置，自己看一下就能明白什么意思，可以不用管，这里就不罗嗦了。</p>
<p>3、eclipse会自动将JadClipse Class File Viewer设置成class文件的缺省打开方式。如果没有默认，可以在Eclipse的Windows——&gt; Perference——&gt;General-&gt;Editors-&gt;File Associations中修改&#8220;*.class&#8221;默认关联的编辑器为&#8220;JadClipse Class File Viewer&#8221;。设置完成后，双击*.class文件，eclipse将自动反编译。我的是默认了，大家有问题的可以试试。</p>
<p><span style="color: red">注</span>：对于存在源代码的类，它不会强行反编译，也就是说它还是会用eclipse自带的Class File Viewer查看class文件。这点很重要哦。毕竟反编译的不如人家的源码好。<br />
<span style="color: red">附</span>：把鼠标焦点放到这个如要查看源码的方法上，然后按F3（eclipse查看源码快捷键），呵呵~源代码出现了。<br />
<br />
不过还是要说明一下，如果可以的话，还是尽量找官方的源码（在eclipse指定源码位置，就可以按F3查看，怎么指定？自己google），而且一般都带说明文档的，这样的话，不必每次使用的时候都查看源码，只要把她的API文档导入就可以了(跟指定源码一样)，开发的时候会方便一些，如果自己学习的话可以没事看看源码。</p>
<img src ="http://www.blogjava.net/sy1214520/aggbug/209371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-06-20 11:13 <a href="http://www.blogjava.net/sy1214520/archive/2008/06/20/209371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>