﻿<?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-空间站-文章分类-IDE</title><link>http://www.blogjava.net/i369/category/17108.html</link><description>北极心空</description><language>zh-cn</language><lastBuildDate>Thu, 17 Apr 2008 06:57:24 GMT</lastBuildDate><pubDate>Thu, 17 Apr 2008 06:57:24 GMT</pubDate><ttl>60</ttl><item><title> 分享一下我的Eclipse启动参数 [转]</title><link>http://www.blogjava.net/i369/articles/183601.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Tue, 04 Mar 2008 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/183601.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/183601.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/183601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/183601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/183601.html</trackback:ping><description><![CDATA[<div class="postTitle"><a href="http://blog.csdn.net/qjyong/archive/2007/05/02/1595055.aspx"><img height="13" src="http://blog.csdn.net/images/zhuan.gif" width="15" border="0"  alt="" />&nbsp;分享一下我的Eclipse启动参数</a>&nbsp;&nbsp; <script src="http://blog.csdn.net/count.aspx?ID=1595055&amp;Type=Rank"></script><span title="文章指数:53"><img src="http://blog.csdn.net/images/star.gif" border="0"  alt="" /><img src="http://blog.csdn.net/images/star.gif" border="0"  alt="" /><img src="http://blog.csdn.net/images/star_half.gif" border="0"  alt="" /></span>&nbsp;&nbsp;<img title="CSDN Blog推出文章指数概念，文章指数是对Blog文章综合评分后推算出的，综合评分项分别是该文章的点击量，回复次数，被网摘收录数量，文章长度和文章类型；满分100，每月更新一次。" alt="CSDN Blog推出文章指数概念，文章指数是对Blog文章综合评分后推算出的，综合评分项分别是该文章的点击量，回复次数，被网摘收录数量，文章长度和文章类型；满分100，每月更新一次。" src="http://blog.csdn.net/images/ask.gif" border="0" /> </div>
<div class="postText">
<p>我的eclipse的启动参数：</p>
<p>D:\eclipse3.2.2\eclipse.exe&nbsp; -vmargs&nbsp;-Xverify:none -XX:+UseParallelGC -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M<br />
<br />
-vmargs 使用JRE的参数，后面就是JRE的参数了：<br />
<br />
-Xverify:none 去掉JAR包数据验证，一般来说只有在网络环境下才需要验证JAR包数据的有效性。本地的话可以不用验证。<br />
<br />
-XX:+UseParallelGC 使用并行垃圾收集机制，据说这个GC算法比较快。具体不清楚。<br />
<br />
-XX:PermSize=64M -XX:MaxPermSize=128M 是设置详细的缓冲数据了。详情看Java官方网站的介绍吧。</p>
<p>-Xms128m Java虚拟机初始化内存容量。<br />
<br />
<span>-Xmx512m Java虚拟机最大使用内在容量，根据你所使用机器的内容大小设置，只要不超过最大内存容量就好。</span><br />
<br />
<span>在我的Inter(R) Core(TM) 2 CPU T5500，2GB DDR2 667的机器第一次启动速度不到15秒，第二次启动速度8秒左右。</span>&nbsp;</p>
</div>
<img src ="http://www.blogjava.net/i369/aggbug/183601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2008-03-04 09:13 <a href="http://www.blogjava.net/i369/articles/183601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于J2ME开发的一些资料</title><link>http://www.blogjava.net/i369/articles/132849.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 27 Jul 2007 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/132849.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/132849.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/132849.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/132849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/132849.html</trackback:ping><description><![CDATA[<div class=postTitle><a class=postTitle2 id=viewpost1_TitleUrl href="http://www.blogjava.net/wiser/archive/2007/03/19/104787.html"><font color=#4371a6>J2ME程序开发新手入门九大要点</font></a> </div>
<p>&#160;</p>
<p>[转贴自yesky]<br>一、J2ME中需要的Java基础知识<br>　　现在有大部分人，都是从零开始学J2ME的，学习J2ME的时候，总是从Java基础开始学习，而且现在讲Java基础的书籍中都是以J2SE来讲基础，这就给学习造成了一些不必要的麻烦，下面将J2ME中用到的和不需要的Java基础知识做一个简单的说明。<br>　　J2ME中使用到的Java基础知识：<br>　　 1、Java语法基础：包括基本数据类型、关键字、运算符等等<br>　　 2、面向对象的思想：类和对象的概念，继承和多态等等。<br>　　 3、异常处理<br>　　 4、多线程<br>　　J2ME中没有用到的Java基础知识：<br>　　 1、JDK中javac和java命令的使用 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 2、Java基础中的很多类在J2ME中没有，或者类中的方法做了大量的精简。所以建议在J2ME中熟悉类库。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 3、Applet、AWT、Swing这些知识在J2ME中根本使用不到。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　简单说这么多，希望学J2ME的朋友们能少走一些弯路，不足之处希望大家积极指正和补充。 <br>　　二、J2ME中暂时无法完成的功能<br>　　列一些J2ME中暂时无法完成的功能，希望大家能积极补充： </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 1、在手机中不更改代码实现移植，主要指游戏。<br>　　 2、动态修改按钮文字。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 3、在Canvas上接受中文输入。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 4、操作本地资源、例如地址本、已收短信息等。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 5、制作破坏性的手机病毒。<br>　　 6、其他等待大家来补充。<br>　　三、J2ME的跨平台性<br>　　J2ME技术源于Java，所以也具有JVM的优势，可以在支持Java的平台上进行移植，但是现在的J2ME技术在跨平台上却做的很糟糕，我们来简单看一下原因：<br>　　1、手机的屏幕尺寸不一：<br>　　这个主要在界面制作上。如果你使用的是高级用户界面，比如你做的是应用开发或者用户登陆、用户注册这样的通用功能时，一般没有什么问题。<br>　　如果你使用的是低级用户界面，比如你做的是游戏，那么你就需要考虑这个问题了。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　2、厂商的扩展API不统一： </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　例如Nokia的扩展API类库UI系列，在别的手机上或者没有实现，或者包名不同等等。<br>　　3、手机平台上实现的bug：<br>　　例如Nokia的7650在实现双缓冲上有bug，那么在这种机型上运行的软件就不能使用双缓冲。其他NOKIA上的一些bug，可以参看：<a href="http://www.cnjm.net/resfetch/EKayXl5MlY2NaSIHXDqIdRYYOhhiXo2ZYQgiaQcmaY1ha4iyCKZijcsVFcqNFWSNy6SNZMvczstkOmF1THk_"><u><font color=#4371a6>http://www.cnjm.net/resfetch/EKayXl5MlY2NaSIHXDqIdRYYOhhiXo2ZYQgiaQcmaY1ha4iyCKZijcsVFcqNFWSNy6SNZMvczstkOmF1THk_</font></u></a><br>　　4、手机性能问题。<br>　　不同手机的可用内存、最大jar文件都有要求，例如Nokia S40的大部分手机支持的最大jar文件为64K，最大可用内容为210K。<br>　　所以现在的手机软件，特别是游戏都提供支持的机型列表，也才有了手机游戏移植人员的存在。<br>　　四、学习J2ME可以从事的工作种类<br>　　现在J2ME技术可以说相当的火暴，这里介绍一些学好了J2ME之后可以从事的工作的种类：<br>　　1、J2ME游戏开发人员<br>　　根据游戏策划或者文档要求，在某种特定的机型(以Nokia S40或S60居多)开发游戏程序。这是现在大部分J2ME程序员从事的工作。<br>　　需要熟练掌握：高级用户界面、低级用户界面、线程，如果是网络游戏，还需要熟练网络编程。<br>　　2、J2ME应用开发人员 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　现在的移动应用还不是很多，但是还是出现了一些，特别是移动定位以及移动商务相关的内容。需要熟练掌握：高级用户界面、线程和网络编程。<br>　　3、J2ME游戏移植人员<br>　　参照源代码，将可以在一个平台上可以运行的游戏移植到其他平台上去。例如将Nokia S40的游戏移植到S60上，或者索爱的T618等等。主要是控制屏幕坐标，有些可能需要替换一些API。<br>　　需要熟悉各平台之间的差异以及相关的技术参数，比如屏幕大小、最大jar文件尺寸等等。<br>　　五、J2ME程序设计的几个原则<br>　　1、使用面向对象编程。<br>　　虽然使用面向过程编程可以减小文件的尺寸，但是为了以后维护的方便和利于扩展，还是要使用面向对象编程。<br>　　2、使用MVC模式<br>　　将模型、界面和控制分离。现在很多的程序将三者合一，但是如果你做的程序比较大的话，还是建议你进行分离。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　3、自动存储用户设定<br>　　使用RMS来存储用户的信息，例如存储用户上次输入的用户名、密码、用户对于系统的设定等，这样不仅可以减少用户的输入，而且对用户友好。很多程序甚至做了自动登陆等。<br>　　4、一些系统设置允许用户关闭。如背景音乐、背景灯显示等。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　5、将低级用户界面的绘制动作放在一个独立的线程里面去。<br>　　6、在需要大量时间才能完成的工作时，给用户一个等待界面。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　六、从模拟器到真机测试<br>　　对于J2ME开发者来说，模拟器给我们带来了很多方便，比如可以在模拟器中调试程序以及很方便的察看程序的效果，但是模拟器也给我们带来了一些问题，比如模拟器实现的bug等等，所以进行真机测试是必须的。<br>　　1、为什么要进行真机测试？ </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　因为模拟器程序可能存在bug，以及真机的性能有限，所以必须进行真机测试。<br>　　2、如何将程序传输到机器中？<br>　　将程序传输到机器中有如下方式：<br>　　 a)　OTA下载<br>　　 b)　使用数据线传输 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 c)　红外传输 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 d)　蓝牙<br>　　你可以根据条件，选择合适的方式。<br>　　3、 真机测试主要测什么？ </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　真机测试的内容很多，主要测试以下几个方面：<br>　　 a)　程序的功能<br>　　 b)　程序的操作性，是否易操作 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 c)　程序的大小,比如Nokia S40系列的手机大部分接受的最大文件尺寸为64K<br>　　 d)　程序运行速度，速度是否可以忍受。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　七、从WTK到厂商SDK<br>　　对于J2ME爱好者来说，基本上大家都是从SUN的WTK(J2ME Wireless Toolkit)开始的，但是对于实际应用来说，仅仅使用WTK是远远不够的，所以在学习过程中，必须完成从WTK到SDK的跨越。<br>　　1、厂商SDK的下载地址？<br>　　&#183;Nokia <br>　　Nokia不愧为手机行业的老大，对于j2me的支持也是一流的，有专门的网站提供SDK和各种文档说明。<br>　　网址是：<a href="http://www.cnjm.net/resfetch/Dbvxamo8cwoKpIh4z44.G4iEykM.MYiOPzEbCpMx8QrKGwv7TD.xao4N"><u><font color=#4371a6>http://www.cnjm.net/resfetch/Dbvxamo8cwoKpIh4z44.G4iEykM.MYiOPzEbCpMx8QrKGwv7TD.xao4N</font></u></a><br>　　&#183;Siemens </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　Siemens对于J2ME的支持也不错，它提供了SDK，模拟器需要独立安装。下载地址如下：<br><a href="http://www.cnjm.net/resfetch/BVBDcHC9yrySkj0S7e24pIs9PnCLEqR77T4GZi5wS8qLLu0upMpLjS6SvRIGcD7qku0-i6RLPsq9OjfEPqTCQkUOt6kgPoukIC6kuEJFDnqpxC59cEJFDnqpvYuNDhSpPYuNDrepcIuNDuu3t7epOouNDrc_"><u><font color=#4371a6>http://www.cnjm.net/resfetch/BVBDcHC9yrySkj0S7e24pIs9PnCLEqR77T4GZi5wS8qLLu0upMpLjS6SvRIGcD7qku0-i6RLPsq9OjfEPqTCQkUOt6kgPoukIC6kuEJFDnqpxC59cEJFDnqpvYuNDhSpPYuNDrepcIuNDuu3t7epOouNDrc_</font></u></a><br>　　&#183;SonyEricsson </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　SonyEricsson SDK以及自己的模拟器，下载地址为：<br>　[url]http://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp/url]<br><a href="http://www.cnjm.net/resfetch/BEe.ZGSB34qK5B9NqS2pZHWSH9stlFti26l4xsYfsFt4H-RbeLCKlGLEYi0fgeRisGSKlB-SsC0fQ5RFv6lkW0PGgQ__"><u><font color=#4371a6>http://www.cnjm.net/resfetch/BEe.ZGSB34qK5B9NqS2pZHWSH9stlFti26l4xsYfsFt4H-RbeLCKlGLEYi0fgeRisGSKlB-SsC0fQ5RFv6lkW0PGgQ__</font></u></a><br>　　&#183;Motorola<br>　　Motorola提供了专门的SDK，内部包含模拟器，下载地址为：<br><a href="http://www.cnjm.net/resfetch/EKayXl5MlY2NPj4-OiYHXgeIBxZiazqIByaNJgdeB2sHImGNTIh1gAcmYjrBdUw_"><u><font color=#4371a6>http://www.cnjm.net/resfetch/EKayXl5MlY2NPj4-OiYHXgeIBxZiazqIByaNJgdeB2sHImGNTIh1gAcmYjrBdUw_</font></u></a></p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　&#183;SamSung </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　SamSung也提供了专门的SDK和模拟器，下载地址为：<br><a href="http://www.cnjm.net/resfetch/CnUnZGQjjsPDP7oJunRUI7phlNiAL9hs4OwvVP9FdLqUb1Qvw7rg7MOjYVTgZPn9VOC6w...2MP..9j5L4BF4JRL2CPfI.kvuuBs-UU.BC4p.v4_"><u><font color=#4371a6>http://www.cnjm.net/resfetch/CnUnZGQjjsPDP7oJunRUI7phlNiAL9hs4OwvVP9FdLqUb1Qvw7rg7MOjYVTgZPn9VOC6w...2MP..9j5L4BF4JRL2CPfI.kvuuBs-UU.BC4p.v4_</font></u></a><br>　　&#183;NEC：<br>　　NEC也提供了集成模拟器的SDK，下载地址为： </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p><a href="http://www.cnjm.net/resfetch/Ig9UMDBaS5eXGxsbLMm43HD4NMZquMmDLNzh-JfcyQ__"><u><font color=#4371a6>http://www.cnjm.net/resfetch/Ig9UMDBaS5eXGxsbLMm43HD4NMZquMmDLNzh-JfcyQ__</font></u></a> <br>　　2、厂商SDK和WTK有什么不同？ </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　厂商SDK最简单的理解就是在WTK的基础上增加了自己的模拟器和自己的扩展API。也就是说，你在使用厂商的SDK时，可以使用厂商的扩展类库，例如Nokia的UI类库，和厂商自己的模拟器而已。每个厂商的扩展API都不多，而且不尽相同。<br>　　3、如何使用？<br>　　有些厂商SDK的使用都和WTK相同，例如SamSung。Nokia提供了独立的界面来开发，但是这个界面在实际开发中使用不多。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　4、厂商SDK的问题 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　厂商SDK实现过程中，有一些bug，而且和真机实现不一致。例如NOKIA的混音播放问题等等。<br>　　八、在J2ME中获得手机IMEI的方法<br>　　IMEI是Internation mobile entity identification的简称，在手机中输入*#06#可以显示该数字，长度为15位，全球唯一，永远不会冲突，所以可以作为识别用户的一个标志。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　下面是在J2ME中获得IMEI的方法：<br>　　1、MOTO系列的手机可以通过读取系统的IMEI属性获得，代码如下： </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　 String imei = System.getProperty("IMEI");<br>　　2、SIEMENS系列的手机可以通过读取系统的com.siemens.IMEI属性获得，代码如下：<br>　　 String imei = System.getProperty("com.siemens.IMEI");<br>　　九、J2ME网络连接中显示问题的解决办法 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　在网络编程中，有些时候会出现一些在没有接收到网络数据就显示界面的，造成界面显示不符合要求（例如公告显示，会先显示公告的背景图片再显示公告信息），这里提一个简单的解决办法给大家： </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　解决这种情况的方法分成三个步骤：<br>　　1、在需要显示的界面中，调用发送网络数据的方法。每次显示时调用该构造方法，不调用Display的setCurrent方法显示。 </p>
<p>JAVA手机网[www.cnjm.net] </p>
<p>　　2、显示等待界面(例如进度条等)，给用户提示，在进行网络连接。<br>　　3、在处理网络反馈的数据完以后，调用Display的setCurrent方法显示显示当前界面。<br><br>===========================================================================<br></p>
<div class=postTitle><a class=postTitle2 id=viewpost1_TitleUrl href="http://www.blogjava.net/wiser/archive/2007/03/30/107454.html"><font color=#4371a6>J2me之怪现象收集</font></a> </div>
<p>本文转自解正宇朋友的《手机Java之怪现象》，个人感觉对我等初学者帮助非常大，故此转贴，由于不知道原文所出网址，这里表示歉意。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下面记载的都是手机java实现中各种奇怪的毛病，bug，或者&#8230;&#8230;特性，是根据某项目的开发经验总结出来的。但是涵盖的手机型号还是有限。因此很有可能某些&#8220;特性&#8221;会存在于更多的采用了相同JVM（比如平台相同、生产厂商）的手机上。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 早期S60的内存泄漏 ==<br>这个bug可以上溯至2003年，甚至更早。表现为java应用中如果使用了Class.getResourceAsStream("本地文件")无法释放其占用的内存，是的，没有任何办法，无论是调用获得的的InputStream实例的close()或将其设为null，甚至显式强制System.gc()，都没有效果。结果就是至少和本地文件同尺寸的内存成为了无法回收的垃圾。这个问题还影响到以Class.getResourceAsStream()为基础的Image.createImage()（这个是最要命的，如何能够不使用图片资源呢！）。<br>这个bug据说在新的S60上已经解决了。但是Nokia3230（4.0526.2ch）、Nokia7610（6.0525.0ch）都存在这个问题。对于这些个有问题的机型，在java程序中是无法完美解决这个问题的，只能尽量避免。比如集中、统一载入资源，永不释放（也就是说，尽量控制泄漏的次数）。当然，这会对已有代码造成很大影响。毕竟手机java应用是内存受限系统的典型，大多数情况下，珍贵的内存中只保留需要的资源。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 键盘响应事件 ==<br>在MIDP1中，获取键盘事件只能自己实现Canvas.keyPressed()。但是MotorolaE398和SonyEricssonK700c的实现却很奇怪。表现为左右软键有可能在这个方法中捕获不到。而是否能够成功捕获，取决于keyPressed()方法中代码的行数&#8230;&#8230;<br>我承认我没彻底搞清楚这其中的玄机。鬼知道Motorola和SonyEricsson是怎么实现的JVM。我只知道把keyPressed中的所有代码提取到另外一个函数中，在keyPressed只把参数传递给新函数，问题就消失了&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 超慢的drawRegion ==<br>除了N-Gage QD，几乎所有的NokiaS60手机都实现了MIDP2的支持。MIDP2中，最为重要的几个特性之一就是Graphics.drawRegion。这个API可以方便的将图片旋转、剪切之后画到画布上。<br>但是，这个API在Nokia3230、Nokia7610等手机上的实际性能表现让人实在不敢恭维。于是，这个最重要的API成了摆设&#8230;&#8230;没什么怎么办，只能急需延用MIDP1的做法，自己实现剪切和旋转，或者像我一样懒，直接要求美工把旋转之后的图片全都做出来&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 诡异的内存容量 ==<br>按照官方Spec，Java在Nokia3125上的可用内存（即Java Heap Size）为512k。但是实际测试的结果是，Nokia3125只有412k左右的实际内存，相差整整100k。不过好在Nokia3125并不是种市场保有量很高的型号。但是它是我正在使用的型号&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 无法repaint ==<br>这个问题只存在于SonyEricssonK700c。表现为在keyPressed()中调用repaint()进行屏幕重画没有任何反映。<br>解决办法是，在keyReleased()中补一个repaint()&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == UTF8 ==<br>还是SonyEricssonK700c的问题。问题存在于new String(byte[], charset)上。也就是说，当获得了某个byte[]，并希望用UTF8作为字符集将其转换为字符串的时候，使用上述方法在SonyEricssonK700c上会出现丢失字符的现象。这个现象很诡异，以至于我目前没有搞清楚什么情况下会丢失字符（我甚至专门写了个测试程序在真机上跑，得出的结论是丢失字符的原因可能会很复杂，简单的拿被丢掉字符附近的一个子串来测没有任何问题）。<br>幸亏还是有解决办法的。不用new String就完了，而要用更加麻烦的办法，比如像我一样，用ByteArrayInputStream，外面套InputStreamReader(bais, "UTF8")，然后用StringBuffer一个一个char读进来，最后再toString()&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 不可靠的copyArea ==<br>这是Motorola机器上的问题，V3和E398都有。copyArea是Graphics的作整块屏幕像素copy的常用API（2D动态背景的游戏几乎是必不可少）。按照Sun官方的Spec，手机厂商有义务来保证其API实现不存在覆盖冲突问题。但是Motorola显然做得不够好。在Motorola手机上使用这个API会随机产生贴图混乱的情况&#8230;&#8230;<br>解决办法是自己实现另外一套机制。比如使用另外一张至少和屏幕同样大小的Image作为缓冲，用两次drawImage来替代copyArea&#8230;&#8230;不过这个方法显而易见的缺点是消耗了更多的内存（那可是不小于屏幕尺寸的Image啊！）。如果内存实在吃紧，只能退而再求其次，作为缓冲的Image继续缩水，drawImage的次数继续增加&#8230;&#8230;不过这个时候需要自己手工解决覆盖冲突&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 无法安静下来的3220 ==<br>不知道这个问题是不是在S40平台上都有，手里S40又支持MIDI的手机实在是太少了&#8230;&#8230;<br>3220的一个很明显的特征就是声音大。以至调用了VolumeControl.setLevel(0)之后还是有声音，和Sun官方的Spec完全不符&#8230;&#8230;没办法，只能在需要静音的时候，再补一个VolumeControl.setMute(true)。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; == 永不ready ==<br>这是一段手机java获取网络数据的常用代码：while(InputStream.ready()) { InputStream.read() }。<br>但是经测试，在Nokia3230上，这个ready永远返回false&#8230;&#8230;没办法，如果不改上述代码的话，就自己实现一个继承类吧。</p>
<img src ="http://www.blogjava.net/i369/aggbug/132849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-07-27 17:27 <a href="http://www.blogjava.net/i369/articles/132849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搭建开发平台―WTK </title><link>http://www.blogjava.net/i369/articles/132802.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 27 Jul 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/132802.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/132802.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/132802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/132802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/132802.html</trackback:ping><description><![CDATA[<a class=diary_title href="http://www.blogcn.com/user23/pirate_sky/blog/24016304.html"><font class=diary_title color=#0000ff><u>搭建开发平台―WTK</u></font></a><a name=24016304></a> <br><br>
<p>来自：J2MEDev yefeng17 <br><br>本文主要讲述J2ME新手最常使用的开发工具Wireless Toolkit（WTK）。从WTK的安装、到MIDlet项目的创建、以及最后的打包发布，一步步带领读者进入MIDlet的开发世界!<br><br>1 什么是J2ME Wireless Toolkit<br>WTK 的全称是Sun J2ME Wireless Toolkit ―― Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本，分别是1.0.4, 2.0, 2.1和2.2。每个版本都包括英语，日语，简体中文，繁体中文4个语种包。<br><br>1.0.4版只能够开发MIDP1.0 应用程序。<br>2.0版只能够开发MIDP2.0 应用程序。<br>2.1版则可以同时开发MIDP1.0、 JTWI(CLDC 1.0, MIDP2.0, WMA1.1)可改用CLDC1.1或加入MMAPI1.1)，自定义(自己随机组合Configuration, Profile以及Optional Package)三种环境下的应用程序。<br>2.2版中，WTK全面的支持JTWI规范。具体的说，即MIDP 2.0, CLDC 1.1, WMA 2.0, MMAPI 1.1, Web Services (JSR 172), File and PIM APIs (JSR 75), Bluetooth and OBEX APIs (JSR 82), and 3D Graphics (JSR 184)；同时您也可以使用该版本开发面向CLDC1.0 和MIDP1.0的应用程序。<br><br><br>系统要求上，WTK2.2至少需要50MB可用硬盘，128MB系统RAM和800MHZ Pentium III CPU。<br><br>你可以在sun的官方网站免费下载。<br><br>WTK2.2 下载链接：http://java.sun.com<br><br>WTK是Sun提供的一个开发工具包。目前各大手机厂商往往把WTK经过自身的简化与改装，推出适合自身产品，如SonyEricsson，Nokia Developer&#8217;s suit等，都属于此种类型；而通过JBuilder, Eclipse等IDE，J2ME开发包工具可以被绑定在这些集成开发环境中，进一步提高开发效率。<br><br>2 J2ME WTK的内容和目录结构<br><br>2.1 安装过程<br>在说明WTK文件结构之前，让我们首先把它安装起来。<br><br>WTK的安装程序与普通程序一样简单，只有一点需要注意，由于WTK自身并没有附带Java的运行环境JDK，所以，在WTK安装之前你需要安装自己的JDK（我们这里选用的是JDK1.4.2）。<br><br>WTK会首先自动检测当前系统已有的Java虚拟机：<br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102633_OOhJgcfnDn.jpg" border=0><br><br>然后显示出当前虚拟机所在路径<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102652_RhseYlPMFf.jpg" border=0><br><br>您在确定无误后，就可以继续了，最后安装成功后，您将得到一个包括多种实用工具的开发包。以下是安装显示的菜单项。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102710_lXbkAwaBNs.jpg" border=0><br><br>2.2 目录结构<br>无论哪个版本的WTK都会包括以下几个目录：<br><br>appdb目录： RMS数据库信息<br><br>apps目录： WTK自带的demo程序<br><br>bin目录： J2ME开发工具执行文件<br><br>docs目录： 各种帮助与说明文件<br><br>lib目录： J2ME程序库，Jar包与控制文件<br><br>session目录：性能监控保存信息<br><br>wtklib目录： JWTK主程序与模拟器外观<br><br><br><br>WTK是用来开发MIDP的，为了让MIDlet可以顺利编译和执行，WTK必须具有CLDC和MIDP的类库，WTK可以帮助我们省去额外安装调试这些类库的时间。而不同版本的WTK包含的程序库内容是不一样的，比如说2.0中包含了midpapi.jar, wma.jar, mmapi.jar，而在2.1中则变为了cldcapi10. jar, cldcapi11.jar, midpapi10.jar, midpapi20.jar, wma.jar以及mmapi.jar；在2.2中，wma.jar又细分为wma11.jar, wma20.jar。如果您在开发中需要某个特定的jar包而当前的WTK版本又没有时，您可以简单把这个jar包拷贝如当前WTK的lib文件夹即可。<br><br>apps目录中包括了许多Demo程序，为我们演示了J2ME的一些技术实例，这些往往是很好的学习材料。<br><br><br>3 使用J2ME WTK创建工程<br>3.1 建立新项目<br>下面让我们用WTK来创建一个经典的Hello World程序，看看这水有多深。<br><br>在WTK的程序列表中运行KToolbar，打开WTK主界面。WTK的标题菜单简单明了的列出了这个工具包的可选功能。<br><br>单击新建项目，键入新建的项目名和启动MIDlet名，这里的项目是一个MIDlet套件，而MIDlet类名则是这个套件的入口，MIDlet文件名(也是Java文件的名字)。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102731_NSFjZqjQRi.jpg" border=0><br><br>产生项目以后，会出现项目的设置表，您可以选择当前目标平台，CLDC配置，以及要采用的MIDP可选包。再不需要某个库文件时，请不要选中它，以减少最后程序大小。<br><br>另外，您还可以指定MIDlet的属性，这些设置将成为JAD，即J2ME程序的描述信息文档。我们的Hello World目前不需要其它的附加设置，于是采用默认，确定之后，控制台信息提示建立成功。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102746_kXQcEmnzkx.jpg" border=0><br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102809_KxgzjaYcym.jpg" border=0><br><br>WTK产生项目后，不同类型的资源有着相对固定的存放位置。Java源文件被放在apps目录下\Hello World\src下，相关程序资源文件（图片，音频）放在\Hello World\res下，应用程序库文件放在\Hello World\lib下，这在WTK中是必须注意的，即便是相对路径，也必须是在该类型目录下建立。<br><br>项目创建成功后，我们来创建一个MIDlet文件，MIDlet是J2ME项目文件的入口文件，也是必须的。在\Hello World\src目录下创建HelloWorld.java，采用默认包，注意，此时创建的java程序必须是与我们在创建项目时键入的MIDlet类名一致。<br><br>在新创建的java文件中输入代码，下文是一个简单的Form程序。<br><br>HelloWorld.java<br><br>import javax.microedition.lcdui.*;<br><br>import javax.microedition.midlet.MIDlet;<br><br><br><br>public class HelloWorld extends MIDlet {<br><br><br><br>Display display;<br><br><br><br>public HelloWorld() {<br><br>super();<br><br>display = Display.getDisplay(this);<br><br>}<br><br><br><br>protected void startApp(){<br><br>Form form = new Form("Hello World!");<br><br>form.append("Welcome to J2ME world!");<br><br>display.setCurrent(form);<br><br>}<br><br><br><br>protected void pauseApp() {<br><br><br><br>}<br><br><br><br>protected void destroyApp(boolean arg0){<br><br><br><br>}<br><br>}<br><br><br><br>完成后保存java文件，单击&#8220;生成&#8221;按钮，由WTK为您进行编译，如果有错误生成，则会在控制台中提示。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102818_MNuSzlqjQz.jpg" border=0><br><br>根据提示信息对MIDlet文件进行修改，再重新生成，直到编译成功。对编译成功的程序，你可以从&#8220;设备&#8221;选项中选择DefaultColorPhone，DefaultGrayPhone或者其它WTK自带的设备模拟器，单击按钮可以看到弹出一个手机模拟器，显示出我们的第一个Hello World程序，如果执行有错，依然会在控制台中给出提示信息。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102834_VgaGlOQLuw.jpg" border=0><br><br>运行成功以后，在HelloWorld/bin目录下，将会产生一个程序描述文档JAD，它清楚的描述了当前MIDlet的名称与版本，发行人，指定的JAR包名称与大小，支持CLDC与MIDP版本等信息。在进阶开发中，默认的联网字符串，签名私钥等信息也可以保存在这个描述文档中。<br><br><br>3.2 开启旧项目<br>当我们下一次重新启动WTK的时候，选择打开项目，WTK会把自身apps目录下的应用项目全部显示出来，包括我们刚刚建立的Hello World，选择&#8220;打开项目&#8221;后，就能够对apps目录下的MIDlet项目进行开发更改了。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102851_UOJAiaLnSi.jpg" border=0><br><br>4 执行MIDlet、打包和混淆<br>4.1 执行MIDlet<br>除了我们刚刚介绍的在KToolbar中执行一个程序，我们还可以在程序组中直接选择Run MIDP Application&#8230;, 这是就可以在弹出的对话框中选择其它路径中的JAD程序运行了<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102911_JrBNFURacK.jpg" border=0><br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102939_jxqzFkAdHn.jpg" border=0><br><br>当我们直接选择运行时，需要注意两个问题：<br><br>1. JAD描述文件与其指定的JAR文件在同一个目录下。<br><br>2. 运行目录路径中不要包含中文。<br><br>4.2 打包成JAR<br>KToolbar的生成功能只能帮我们将源代码编译并预先审核，并不会帮我们产生JAR文件，而我们如果要发布MIDP程序，除了JAD描述文件，JAR是必须的，这就需要打包。<br><br>在KToolbar选中项目 ―― 包 ―― 产生包，可以把整个程序，包括资源文件打包成JAR文件。形成的JAR保存在apps\HelloWorld\bin目录下。<br><br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_102949_tKeANpBGIQ.jpg" border=0><br><br>4.3 包混淆<br>在上面的操作中，我们看到，除了&#8220;产生包&#8221;，另外还有一个&#8220;产生混淆包&#8221;选项。所谓混淆，是为了防止别人反编译后读取源代码，将程序(.class文件)进行混淆，经过混淆的Java Byte Code可以增加别人反编译的时间。<br><br>这里我们使用开源的ProGuard，关于混淆的详细介绍和混淆工具的下载，见本教程的前面的章节。<br><br>把刚刚获取的ProGuard解压，在解压目录的lib子目录中找到proguard.jar文件，将其拷贝到WTK安装目录的bin下，再执行混淆包。这是我们将会发现apps\HelloWorld\bin下的JAR大小变小了，反编译后的各个名称也变得毫无意义了。<br><br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_103024_UObypFTxMr.jpg" border=0><br><br>5 WTK中其它值得关注的功能<br>到这里，我们就如何用WTK创建，执行，打包，混淆一个MIDP项目做了比较详细的介绍。除了以上所说各点，WTK(2.2版)还提供诸多实用功能。这些都可以在编辑 ―― 偏好中找到。<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_103057_wbIKGqRKly.jpg" border=0><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_103107_AHdAulRXKQ.jpg" border=0><br><br>例如，当我们需要监视程序性能的时候，可以选中&#8220;启用内存监视器&#8221;，在下一次模拟器执行的时候，我们就可读出程序运行时的内存消耗均值，消耗峰值以及具体产生对象的个数和使用情况。<br><br>除了内存监视，我们还可以执行网络监视，设定存储区大小和堆栈大小，设定安全签名和蓝牙操作属性，以尽可能模拟手机实际运行环境，这些功能在进阶开发中都是非常实用的。<br><br>注意：<br>虽然WTK为我们提供了各种工具来模拟手机运行环境，但在实际开发中，由于受到手机硬件，网络条件等诸多限制，MIDP的真实性能在不同机器上会出现不同的反应，与WTK中的表现可能差别更大。<br><br>从菜单中选择&#8220;工具集&#8221;可以看到更多的实用工具，这些都是开发实用的j2me程序时会频繁使用到的。介于本教程面向入门级读者，所以这部分内容请读者自行研究.<br><br><br><img style="DISPLAY: inline" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_07_23_103120_EJvUvrgceZ.jpg" border=0><br></p>
<span id=dissub5>
<div id=blog_sub_st name="blog_sub_st"><br></div>
</span>
<img src ="http://www.blogjava.net/i369/aggbug/132802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-07-27 15:49 <a href="http://www.blogjava.net/i369/articles/132802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse+wtk配置j2me开发环境</title><link>http://www.blogjava.net/i369/articles/132797.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 27 Jul 2007 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/132797.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/132797.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/132797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/132797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/132797.html</trackback:ping><description><![CDATA[下载最新版的必备软件，<br>1 eclipse 3.2.2 到下面这个地址去找找<br>&nbsp; http://www.eclipse.org/downloads/ <br>2 eclipseme 1.6.7 <br>&nbsp; http://sourceforge.net/project/showfiles.php?group_id=86829 <br>3 wtk2.5 (Sun <a onclick="javascript:tagshow(event, 'Java');" href="javascript:;" target=_self><u><strong><font color=#800080>Java</font></strong></u></a> Wireless Toolkit 2.5 for CLDC) sun公司提供的无线开发工具包<br>&nbsp; http://java.sun.com/products/sjwtoolkit/zh_download-2_5.html<br><br>安装配置步骤<br>&nbsp; 1.安转Eclipse3.2.2（必须先安装好jdk1.5或以上版本，这里不说明了）<br>&nbsp; 2.安装EclipseMe1.6.7<br>&nbsp; 3.安装WTK2.5<br>&nbsp; 4.测试HelloWorld<br>&nbsp; 5.使用Nokia模拟器测试<br>&nbsp; <br>配置具体步骤（必要的）<br>&nbsp; 1.1 安转Eclipse3.2.2<br>&nbsp;&nbsp;&nbsp; 把下载到的zip文件解压后直接放到c盘根目录即可，当然，你可以放到你喜欢的任何地方，这里为了描述方便放到c:\eclipse<br>&nbsp; 1.2 运行eclipse，如果能正常启动，说明jdk安装正确，否则，你可能需要一个新版本的jdk,到sun的网站去下。<br>&nbsp; 1.3 把eclipse1.6.7 解压到一个临时目录中，把目录和文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugins<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; site.xml<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全部copy到eclipse的目录中即可<br>&nbsp; 1.4 启动eclipse3.2.2 从菜单 windows-&gt;references...进入<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在references面板的左边的树状目录中，应该多了一个J2ME项。<br>&nbsp; 1.5 继续安装WTK2.5 ,把主目录安装到C:\WTK25下，其他的按默认安装就行<br>&nbsp; <br>&nbsp; 好，软件都安装好了，下面是最重要的配置部分<br>&nbsp; 1.6 修改Eclipse的配置，使其邦定EclipseME框架<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6.1 在eclipse的配置目录configuration中找到配置文件config.ini<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6.2 用文本编辑器打开，增加一个属性定义<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; osgi.framework.extensions=eclipseme.core.hooks<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果该属性已经存在，则把值eclipseme.core.hooks加上<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：这一行必须加在config.ini的eof=eof前面，不能加到后面。否则，可能会导致Eclipse启动失败。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6.3 保存config.ini<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6.4 重新启动 eclipse<br>&nbsp; 1.7 修改eclipse的build path 和debug选项<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.1 把源代码和输出分离开<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.1.1 从菜单 windows-&gt;references...进入<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.1.2 展开references面板的java项，然后点选 build path<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.1.3 默认情况下 "source and outpub folder"项的 "project"为选中，我们修改这个默认设置，把"folders"选中<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样，就可以让eclipse把源代码和输出分离开。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.2 修改调试选项的异常挂起设置和超时时间（很重要）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.2.1 从菜单 windows-&gt;references...进入<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.2.2 展开references面板的java项，然后点选 debug<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.2.3 在Suspend Execution项中，把 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Suspend execution on uncaught exceptions" <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Suspend execution on compilation errors"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这两项的勾去掉<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.7.2.4 在面板的最下面，把 debugger timeout(ms)设置为 15000（这个参数太重要了，一定要记得改）<br><br>&nbsp; 1.8 为eclipseme配置模拟器<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.8.1 从菜单 windows-&gt;references...进入<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.8.2 在references面板左侧的树种，展开 "J2ME" 项<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.8.3 选中 Devices Management,点击右边的 "Import..."按钮<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.8.4 在弹出的Import Device 面板中，点击按钮"browse...",然后选择WTK的bin目录，确定后，点击" refresh"按钮<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就会自动去找到模拟器了。点击&#8220;finish&#8221;按钮返回。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.8.5 这样，模拟器就配好了，如果需要其他的模拟器，照这样做就可以了。<br><br>2 创建MIDlet应用<a onclick="javascript:tagshow(event, '%B3%CC%D0%F2');" href="javascript:;" target=_self><u><strong><font color=#800080>程序</font></strong></u></a>。<br>&nbsp;&nbsp;&nbsp; 有两种方法创建MIDlet应用程序<br>&nbsp;&nbsp;&nbsp; 方法1：（适用于从无到有）创建MIDlet工程<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从菜单 File -&gt;New -&gt;Project 进入工程面板<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后展开J2ME ，其中只有一个 J2ME MIDlet Suite<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入工程名称后，就可以选择你需要的模拟器了，一路下去就行了。<br>&nbsp;&nbsp;&nbsp; 方法2.(适用于往有工程里面添加MIDlet程序)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从菜单 File -&gt;New -&gt;others 进入NEW面板<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后展开J2ME ，其中有2个选项 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J2ME MIDlet <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J2ME MIDlet Suite<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果选择 J2ME MIDlet ，则创建一个MIDlet,选择J2ME MIDlet Suite，则创建一个MIDlet工程。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>3 调试、运行<br>&nbsp;&nbsp;&nbsp; 在工程中，在需要调试或运行的主要类上点击右健，从右健菜单中选择 <br>&nbsp;&nbsp;&nbsp;&nbsp; run as -〉Emulated j2me Midlet <br>&nbsp;&nbsp;&nbsp;&nbsp; 或者<br>&nbsp;&nbsp;&nbsp;&nbsp; debug as -〉Emulated j2me Midlet <br>&nbsp;&nbsp;&nbsp;&nbsp; 即可进行运行和调试<br><br>4 打包<br>&nbsp;&nbsp;&nbsp; 在需要打包的工程目录上点击右健，从右键菜单中选择<br>&nbsp;&nbsp;&nbsp; j2me-&gt;create package 即可<br><br>5.jad 的配置<br>&nbsp;&nbsp;&nbsp; 略。<br>=================================================================================<br>
<p style="FONT-SIZE: 10pt" align=left>Eclipse安装与配置<o:p></o:p></p>
<p style="FONT-SIZE: 10pt" align=left>A.安装：<br>1．安装JDK<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.4.2</st1:chsdate> (WTK2.2要求1.4.2以上)<br>2．安装WTK<br>3．安装Eclipes<br>4．解压缩Eclipseme到Eclipse的plugin目录。Eclipseme<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">0.5.5</st1:chsdate>之后的版本则不适用该方法，具体配置方法会在后面描述。<br>&nbsp;&nbsp;&nbsp; EclipseMe作为Eclipse一个插件，致力于帮助开发者开发J2ME应用程序。EclipseMe并不为开发者提供无线设备模拟装置，而将各手机厂商的实用模拟器紧密连接到Eclipse开发环境中，为开发者提供一种无缝统一的集成开发环境。你可以在<a href="http://www.eclipseme.org/"><u><font color=#800080>http://www.eclipseme.org/</font></u></a>上得到免费下载的EclipseMe，本文写作时的最新版本是<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.5.0</st1:chsdate>，出于稳定的考虑，在这里选用eclipseme.feature_1.2.3_site.zip来为大家演示。<br>&nbsp;&nbsp;&nbsp; 除了Eclipse与EclipseMe之外，还需要java运行环境和一些手机模拟器来完成安装。以下列出了完成本文的工具列表：<br>&nbsp;&nbsp; （1．JDK <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.4.2</st1:chsdate> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; （2．Eclipse 3.1.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>&nbsp;&nbsp; （3．Eclipse 3.1.1 语言包&nbsp;NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip和NLpack1-eclipse-SDK-3.<st1:chmetcnv w:st="on" UnitName="a" SourceValue="1.1" HasSpace="False" Negative="False" NumberType="1" TCSC="0">1.1a</st1:chmetcnv>-win32.zip<br>&nbsp;&nbsp; （4．EclipseMe 1.2.3&nbsp;&nbsp;&nbsp; eclipseme.feature_1.2.3_site.zip<br>&nbsp;&nbsp; （5．Sun WTK 2.2 (sun的通用模拟器)<br>&nbsp;&nbsp; （6. Nokia Developer's Suite 2.2 (Nokia开发者套件，包括几款比较典型机型的模拟器) </p>
<p style="FONT-SIZE: 10pt" align=left>A-1 Eclipse安装与汉化<br>&nbsp;&nbsp;&nbsp; Eclipse的安装过程更加简单，事实上，这仅仅是一个解压缩的过程。将你下载的Eclipse SDK压缩包eclipse-SDK-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">3.1.2</st1:chsdate>-win32拷贝在你的目标目录下，我们这里以D盘根目录为例，然后解压到当前文件夹。<br>&nbsp;&nbsp;&nbsp; Eclipse<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">3.1.2</st1:chsdate>汉化link方法归纳：<br>(1.下载语言包：NLpack1_FeatureOverlay-eclipse-SDK-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">3.1.1</st1:chsdate>.zip<br>NLpack1-eclipse-SDK-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">3.<st1:chmetcnv w:st="on" UnitName="a" SourceValue="1.1" HasSpace="False" Negative="False" NumberType="1" TCSC="0">1.1a</st1:chmetcnv></st1:chsdate>-win32.zip<br>(2.解压缩两个语言包，并将二者合并，即相同文件夹名的文件夹合并成一个，最后得到一个eclipse文件夹。<br>(3.在Eclipse安装目录下创建language和links这两个文件夹。并将第2步合并后的文件夹拷贝到language文件夹下（注意：拷贝整个解压后得到的eclipse文件夹）。<br>(4.在links文件夹下创建一个文本文件：links.txt。内容为language文件夹路径，例如：path=d:\\eclipse\\language<br>(5.重新启动Eclipse。<br>&nbsp;&nbsp;&nbsp; 注意：如果出现有些英文单词没汉化时，可以把\eclipse\configuration目录下的.settings文件夹删掉，重启eclipse就完全汉化了。</p>
<p style="FONT-SIZE: 10pt" align=left>A-2 EclipseMe插件安装<br>&nbsp;&nbsp;&nbsp; 在Eclipse中选择&#8220;帮助/软件更新/查找并更新&#8221;，在弹出对话框中选择&#8220;搜索要安装的新功能部件&#8221;，在&#8220;新建已归档站点&#8221;的弹出框中，指定EclipseMe压缩文件eclipseme.feature_<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.2.3</st1:chsdate>_site.zip。点击确定后可以看到Eclipse已经搜索到了相应的插件。选中EclipseMe的复选框，接受协议，忽略功能部件验证，最后重新启动控制台，EclipseMe插件就已经顺利的安装好了。<br>&nbsp;&nbsp;&nbsp; 为了验证EclipseMe确实已经安装上了，我们在工作台重启之后，打开&#8220;窗口/首选项&#8221;中，我们可以看到一个J2ME选项，这时，Eclipse移动开发的第一步，我们已经成功的迈出了！<br>&nbsp;&nbsp;&nbsp; 注意：安装好EclipseMe之后，我们要对原有的Eclipse配置做一点小小的改动。由于移动开发时我们需要首先启动手机模拟器，那么在Debug模式的Eclipse默认设置不等到模拟器启动就会失败。修改这点很简单，在首选项的&#8220;java/调试&#8221;中，把默认设置更改为<span style="FONT-SIZE: 10pt">选窗口--首选项 --JAVA --调试--把第1、2个钩去掉，并把最下面调试延时设置15000。</span>调试模式就可以顺利的启动了。</p>
<p style="FONT-SIZE: 10pt" align=left>A-3 加载厂商模拟器<br>&nbsp;&nbsp;&nbsp; EclipseMe为我们提供了一个集成开发环境，但仅仅这些是不够的，我们还需要一种或多种手机模拟器作为程序运行的实际载体。目前，各大手机厂商都拥有多种型号的手机模拟器，Sun也提供了一种通用模拟器。这里采用Sun WTK和Nokia Developer's Suite 两种来演示。<br>&nbsp;&nbsp;&nbsp;下面将WTK绑定到Eclipse。找到路径&#8220;窗口/首选项/ J2ME/ Platform Component&#8221;，右键单击对话框右侧的wireless toolkit，我们可以添加当前系统已有模拟器。在单击&#8220;浏览&#8221;按钮之后，我们选定WTK的安装目录。EclipseMe会自动分析出当前模拟器类型，并显示出来。确认之后，我们发现Platform Component一栏上添加了关于WTK的许多配置信息，此时，WTK已经被我们集成到EclipseMe上了。<br>&nbsp;&nbsp;&nbsp; Nokia拥有多种型号的手机模拟器，为了统一管理，它推出了用于集中管理这些模拟器的管理软件Developer's Suite。Developer's Suite本身是一个可以独立运行的工具包，它同样可以被EclipseMe绑定，使开发者在一个相同的工作环境下高效率的工作。这里，我们采用了Nokia Developer's Suite 2.2，这个版本甚至在安装的时候就可以绑定Eclipse了！<br>&nbsp;&nbsp;&nbsp; 首先，从Nokia论坛上下载安装文件，如果电脑中有旧版本的Developer's Suite，需要首先卸载旧版本。Nokia的开发包是提供给Nokia论坛的开发者使用的，所以，在接受安装协议之后，你需要提供在Nokia论坛的用户名和安装序列号。第一次安装没有序列号也不用担心，输入一栏中什么都不用填直接忽略过去，Developer's Suite会让你选择一种代理联网模式(如果没有用代理服务器上网就选择no proxy)，然后要求你输入在Nokia论坛的用户名和密码进行注册。注册成功之后，用户名对应的序列号就会被发送到你的邮箱中，查收一下，就可以继续了！(有的时候Nokia发送序列号的行为会很慢，没办法，只有等等了)。<br>&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 10pt">当完成认证之后，会发现Developer's Suite 2.2提供了多种安装方式，包括独立安装或者直接与Eclipse集成。如果选择了与Eclipse集成，那就要提供当前Eclipse的安装目录。如果选择了独立安装，在重启系统之后，以与添加Sun WTK相同的方法，在&#8220;首选项/J2ME/Platform Components&#8221;中选中Developer's Suite的安装目录，确定之后可以看到，Wireless Toolkits中除了WTK，Nokia Developer Suit也被列在其中了！</span></p>
<img src ="http://www.blogjava.net/i369/aggbug/132797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-07-27 15:30 <a href="http://www.blogjava.net/i369/articles/132797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在NetBeans中进行中英文版本切换</title><link>http://www.blogjava.net/i369/articles/132784.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 27 Jul 2007 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/132784.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/132784.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/132784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/132784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/132784.html</trackback:ping><description><![CDATA[<span class=oblog_text>&nbsp;
<p>NetBeans刚出来时还只有英文版，后台在大家努力下终于有了中文版，但是在中英文版本中进行切换却是一件难事，经过苦心查找资料和多次的&nbsp;尝试，终于成功了，现与大家分享：</p>
<p>既然要进行语言切换，那自然需要你安装的是多国语言版本或者中文版的，</p>
<p>在安装成功后会在桌面生成一个快捷方式，名位&#8220;NetBeans 5.5&#8221;，在属性中可以看到&#8220;目标&#8221;为"C:\Program Files\netbeans-5.5\bin\netbeans.exe"，当然安装目录不定，大家得改成自己的，现在到了关键时刻了，</p>
<p>在安装成功后NB使用操作系统默认的语言的，如果是中文版的操作系统，则使用中文版。</p>
<p>如果你想使用英文版的NB，那么只需要在那个"C:\Program Files\netbeans-5.5\bin\netbeans.exe" 后面加一个<br>-locale en，即快捷方式的属性中的目标栏为<br>"C:\Program Files\netbeans-5.5\bin\netbeans.exe" -locale en</p>
<p>就OK了。我一般是把默认的快捷方式复制一份，再改那么，这样就有中文，英文两个版本的快捷方式了.</p>
</span>
<img src ="http://www.blogjava.net/i369/aggbug/132784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-07-27 14:32 <a href="http://www.blogjava.net/i369/articles/132784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse 5.5 GA 算号器源代码（分析） </title><link>http://www.blogjava.net/i369/articles/131266.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 19 Jul 2007 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/131266.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/131266.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/131266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/131266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/131266.html</trackback:ping><description><![CDATA[<p>其实5.5算号器的的源代码并没有多大改变，自己看看就清除了！<br></p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br><br><br></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">//*5.5.x&nbsp;GA算号源代码</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Crack&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;String&nbsp;convert(String&nbsp;s)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;s.length()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;s;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">&nbsp;abyte0[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.getBytes();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ac[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[s.length()];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;abyte0.length;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;k;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;abyte0[i];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">48</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">57</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;((j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">48</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">48</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">65</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">90</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;((j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">65</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">65</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">97</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">122</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;((j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">97</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">97</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ac[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">)&nbsp;j;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;String.valueOf(ac);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;hash(String&nbsp;s)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ac[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.toCharArray();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ac.length;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;k;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">31</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;ac[j];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;Math.abs(i);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;String&nbsp;inputString()&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;bufferedreader&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BufferedReader(<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InputStreamReader(System.in));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bufferedreader.readLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(IOException&nbsp;ioexception)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ioexception.printStackTrace();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;s;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String&nbsp;args[])&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">My&nbsp;Eclipse&nbsp;IDE&nbsp;vxx.xx&nbsp;Keygen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">License&nbsp;Name&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;inputString();<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;程序关键代码：</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;licStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">YE3MP-100000-0912310</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;h&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;licStr<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Decompiling&nbsp;this&nbsp;copyrighted&nbsp;software&nbsp;is&nbsp;a&nbsp;violation&nbsp;of&nbsp;both&nbsp;your&nbsp;license&nbsp;agreement&nbsp;and&nbsp;the&nbsp;Digital&nbsp;Millenium&nbsp;Copyright&nbsp;Act&nbsp;of&nbsp;1998&nbsp;(http://www.loc.gov/copyright/legislation/dmca.pdf).&nbsp;Under&nbsp;section&nbsp;1204&nbsp;of&nbsp;the&nbsp;DMCA,&nbsp;penalties&nbsp;range&nbsp;up&nbsp;to&nbsp;a&nbsp;$500,000&nbsp;fine&nbsp;or&nbsp;up&nbsp;to&nbsp;five&nbsp;years&nbsp;imprisonment&nbsp;for&nbsp;a&nbsp;first&nbsp;offense.&nbsp;Think&nbsp;about&nbsp;it;&nbsp;pay&nbsp;for&nbsp;a&nbsp;license,&nbsp;avoid&nbsp;prosecution,&nbsp;and&nbsp;feel&nbsp;better&nbsp;about&nbsp;yourself.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;s;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;hash(h);<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;lic&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;licStr&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;Integer.toString(j);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">License&nbsp;Key&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;convert(lic));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;exception)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exception.printStackTrace();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>}</span></div>
<p><br>&nbsp;</p>
<p>看看代码，其实只有licStr这部分变了：</p>
<p>5.5.x GA版的：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">String&nbsp;licStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">YE3MP-100000-0912310</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div>
<p><br>&nbsp;</p>
<p>5.1.x 以前的：<br></p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">String&nbsp;licStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">YE3MP-501-00-0912310</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div>
<p><br>&nbsp;</p>
<p>看出来了吧，只是很小的改动！</p>
<p>这段代码的解释：（5.5.x GA）</p>
<p>E3MP&nbsp;&nbsp;表示pro版，E2MY 表示standard版；</p>
<p>100000 前面100表示版本号，后面000为使用人数，可以随便填，默认000为Ultimate；</p>
<p>091231 表示使用到期时间为：2009-12-31，这个已经是最大期限了，不能再改大了！</p>
<img src ="http://www.blogjava.net/i369/aggbug/131266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-07-19 14:39 <a href="http://www.blogjava.net/i369/articles/131266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse的插件安装总结</title><link>http://www.blogjava.net/i369/articles/86180.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 07 Dec 2006 14:02:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/86180.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/86180.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/86180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/86180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/86180.html</trackback:ping><description><![CDATA[Eclipse的插件安装是很方便的，只需将插件目录拷贝到Eclipse安装目录下的Plugins子目录下即可，但有时候即使这样做了插件还是没有出来，目前来说可按下面几个步骤检查：<br />1.首先看一下About中的 Plugin装载清单，如果没有则需先确认所安装的插件的依赖插件已经安装。Eclipse的插件是有依赖关系的，具体表现在每个插件 Plugin.xml中的&lt;requires&gt;标记中，里面的每个&lt;import&gt;标记即表示所依赖的插件ID，Eclipse 在启动时会按照插件的依赖关系逐个将插件装载，若找不到所依赖的插件，则所安装的插件运行就有可能不正常。<br /><br />2.若装载的Plugin 清单里已经有了，那可能是没有打开此插件的View或者需要在Preference里配置一些东西才有效，这个最好看一下所安装插件的 Plugin.xml，看它都扩展了哪些扩展点，菜单无非就是actionSets这个扩展点，界面都是views这个扩展点，可以在Show View里设置一下，还有其它一些扩展点，可以具体问题具体分析。 <br /><br />3.最有效的办法：看Log。在Eclipse安装目录Workspace/.metadata子目录下（若没有使用默认的工作空间，则目录结构可能会不同）有一个.log文件，从这里面一般可以找到失败的原因。<br /><br />4.如果插件还是没有安装，则删除Eclipse安装目录Configuration子目录下的org.eclipse.update目录，然后重新启动。<br /><br /><br />分类管理plugins<br />一般来说，安装插件都是直接拷贝到Plugins子目录下，但是这样有个缺陷，若插件太多，会使内容非常混乱，而且分不清哪个是系统自带的，哪个是以后安装的。这里提供一个办法：<br />在Eclipse 安装目录下新建一个子目录links，里面新建一个文件abcd.link，文件名随便取，文件里的内容为path=D:/MyPlugins（自己的目录中），而在Path中指定的目录，即刚才的D:/MyPlugins目录下，一定要有一个eclipse子目录，在此子目录下再有features 及plugins子目录（同Eclipse安装目录一样），新插件在安装时即可以拷贝到此plugins目录下，这样就避免了所有插件都放在一起的缺点。而且links目录下可以建多个*.link文件，每个.link文件中的内容可有多行path=...，极大的方便了将插件按照功能来进行分门别类。 <br /><br />个人建议用相对路径，在Eclipse根目录下建立一MyPlugins目录插件放在里面的eclipse的plugins里在links里建立一个MyPlugins.link文件（文件名要于插件所放的文件夹同名）在ｌｉｎｋ文件中写上path=MyPlugins(这里是相对路径)；<br />如果想要将不同的插件分开来放则每建立一个目录则在ｌｉｎｋｓ目录下建立一个相应的ｌｉｎｋ文件，名称可以随便但是一定要对应（link文件名，path名,文件夹名）<br />如果想把不同的插件放在ｅｃｌｉｐｓｅ根目录下的一个文件夹里则值将ｌｉｎｋ文件中加一个路径path=MyPlugins/onePlugin(文件名为onePlugin，插件放在onePlugin中的eclipse的plugins中)<img src ="http://www.blogjava.net/i369/aggbug/86180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-12-07 22:02 <a href="http://www.blogjava.net/i369/articles/86180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven使用手册 </title><link>http://www.blogjava.net/i369/articles/86044.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 07 Dec 2006 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/86044.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/86044.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/86044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/86044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/86044.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p>来自:http://www.jieesoft.com/modules.php?name=News&amp;file=article&amp;sid=155</p>
				<p>Maven和ANT是Apache 推出的大名鼎鼎的Build和工程管理工具，国内有人将他做了汉化工作，并推出了maven手册汉化工作，其中手册已经完工，对广大程序员可是一大帮助。<a href="http://http://maven.huangdong.com/">进入该网站</a><br /><a>用户手册</a></p>
				<ol>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#关于手册">关于手册</a>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#简介">简介</a>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#项目对象模型">项目对象模型</a>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#POM_处理机制">POM 处理机制</a>
								<ol>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#POM_插值机制">POM 插值机制</a>
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#POM_继承机制">POM 继承机制</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#使用插件">使用插件</a>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#maven_xml文件">maven.xml文件</a>
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#简单的maven_xml例子">简单的maven.xml例子</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#project节点">project节点</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#目标">目标</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#Jelly编程">Jelly编程</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#Maven_配置">Maven 配置</a>
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#属性的处理机制">属性的处理机制</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#插件的属性">插件的属性</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#行为属性">行为属性</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#使用代理">使用代理</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#使用多个远程Repositories">使用多个远程Repositories</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#项目设置">项目设置</a>
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#开始一个新项目">开始一个新项目</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#构建">构建</a>
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#构建生命周期">构建生命周期</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#在CVS中存放jar文件">在CVS中存放jar文件</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#重载已声明的依赖包">重载已声明的依赖包</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#使用SNAPSHOT依赖">使用SNAPSHOT依赖</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#多项目构建和Reactor">多项目构建和Reactor</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#离线构建">离线构建</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#命令行选项介绍">命令行选项介绍</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#测试">测试</a>
								<br />
								<br />
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#测试资源">测试资源</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#运行一个单独的测试">运行一个单独的测试</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#打包">打包</a>
								<br />
								<br />
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#JAR_资源">JAR 资源</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#部署">部署</a>
								<br />
								<br />
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#固化SNAPSHOT依赖">固化SNAPSHOT依赖</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#拷贝依赖JAR包">拷贝依赖JAR包</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#命名约定">命名约定</a>
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#规则和指南">规则和指南</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#项目">项目</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#依赖">依赖</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#发布多个包的项目">发布多个包的项目</a>
										</li>
								</ol>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#远程Repository布局">远程Repository布局</a>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#本地Repository布局">本地Repository布局</a>
								<br />
						</li>
						<li>
								<a href="http://maven.huangdong.com/reference/user-guide.html#生成项目站点">生成项目站点</a>
								<br />
								<ol>
										<br />
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#颜色">颜色</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#风格">风格</a>
												<br />
										</li>
										<li>
												<a href="http://maven.huangdong.com/reference/user-guide.html#报告">报告</a>
										</li>
								</ol>
						</li>
				</ol>
				<p>
						<br />
						<br />
						<br />
						<br />
						<a>关于手册</a>
						<br />这篇Maven使用手册意在通过提供完整的描述和例子，帮助开发人员了解Maven。 如果你有任何建议或者意见请在 <a href="mailto:users@maven.apache.org">Maven使用者邮件列表</a>上发表. <br />感谢选择Maven! <br /><br /><a>简介</a><br />Maven最早始于Jarkarta Turbine项目，目的是为了简化构建过程。这个项目下面有 几个子项目，每个子项目都有自己的Ant文件，但是区别很小，而且生成的JAR 文件都要check in到CVS中。我们希望有一种标准的方式来构建这些项目，一种可以 清晰描述项目的方式，一种易于发布项目信息的方式，一种在多个项目之间共享JARs 的方式。 <br />这个结果就是产生了一个可以用于构建、管理任何基于java的项目。我们希望我们创造 的这个工具可以让Java开发者的日常工作更加轻松，并有助于理解基于java的项目. <br /><br /><a>项目对象模型</a><br />Maven是基于项目对象模型(POM)的概念而创建的。在这个模型中，所有由Maven产生的 artifact都是清晰定义的项目模型的结果。构建，文档，源码度量，源码交叉引用和其他 任何由Maven plug-in提供的东西都是由POM来控制的。 <br /><br /><a>POM 处理机制</a><br />这篇文档简单的描述了Maven执行过程中是如何处理POM的。这里有一些简单的POM例子 来展示继承机制和插值机制。 <br /><br /><a>POM 插值机制</a><br />POM(通常以project.xml的名字出现)现在已经被当作Jelly脚本来处理了。大部分时 候，用户无须关心project.xml文件是不是真正的Jelly脚本，但是，如果需要的话， 也可以使用内置值。我也不愿看到逻辑控制语句出现在project.xml中，但是由于 project.xml实际上已经是一个隐含的jelly的脚本，所以它会有足够的灵活性:-)。 下面是一个简单的例子。 <br />3 <br />maven <br />maven <br />Maven <br />1.0-b5-dev <br /><br />Apache Software Foundation <br />http://jakarta.apache.org/ <br />/images/jakarta-logo-blue.gif <br /><br />2001 <br />org.apache.${pom.artifactId} <br />/images/${pom.artifactId}.jpg <br /><br />Maven is a project that was created in ${pom.inceptionYear}. <br />${pom.name} is a Java Project Management Tool <br /><br /><a>POM 继承机制</a><br />现在有一种简单方式可以用于在POM中进行继承，下面是一个简单的例子： <br />project.xml <br />super-extendo <br />super-extendo <br />Super Extendo <br /><br />**/*Test*.java <br /><br />**/TestAll.java <br />**/*Abstract*.java <br /><br />目前对POM父对象的解析还相对较弱，现在对一层以上的继承还没有做过任何测试。尽管如此， 单层继承加上插值机制已经能够给带来很多好处。这些机制的意图在于简化构建的共用问题。 <br />你可以这样定义主模板： <br /><br />3 <br />commons <br />commons-master <br />Commons Master Maven POM <br /><br />Apache Software Foundation <br />http://www.apache.org <br /><br />jakarta <br />http://jakarta.apache.org/commons/${pom.artifactId}.html <br />http://nagoya.apache.org/ <br />jakarta.apache.org <br />/www/jakarta.apache.org/commons/${pom.artifactId}/ <br />/www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId}/ <br /><br />scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId} <br />http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId}/ <br />... <br /><br />子POM对象可以这样定义： <br />commons-betwixt <br />commons-betwixt <br />Betwixt <br />... <br /><br />这样你就可以在父POM对象中，将子POM对象的${pom.artifactId}替换进去。有许多项目的 构建都以相似的方式进行构建，这样一来，对于项目的公共部分，你就可以使用一个主模板， 然后在子POM对象project.xml中定义有区别的部分，而这部分内容通常很少。 <br />这种机制确实还可以简化那些需要产生多个JAR包的项目。由于project.xml和标准Ant构建 不会相互干扰，我计划在公共部分测试继承机制。 <br />如果你对使用这种机制，DVSL报告会变成什么样感到疑惑，我要说，你很上路。我已经修改 了DVSL报告来适应POM本身，这就是说DVSL转换是基于java对象的。在使用继承和插值机制的 时候，为了正确的产生DVSL报告，这是很有必要的。象上面列出的子模板是无法工作的，我们 需要全面的解析POM。我能说的是，它可以工作了！我所使用的处理方式可能不是最有效率的 方式，但仍有提升的空间。因为POM只会被处理一次(不管怎么说，这就它的原理，我可能漏了 某些东西)，然后到处使用，至少这就是我以前试图做的事情，所以我们很有可能会取得平衡。 <br />如果你不使用继承和插值，那么一切照常工作。maven站点本身一切ok，有几个刚部署的站点 已经使用了我昨晚提交的东西了。 <br /><br /><a>使用插件</a><br />Maven是一个很紧凑的内核，围绕着它的是许许多多的插件。Maven所有的功能都是由插件来提供 的。 <br /><br /><a>maven.xml文件</a><br />项目中的maven.xml文件是Maven在执行过程中要使用的“定制”文件。 <br />在这个文件中，你可以加入Maven构建中需要的额外处理。或者在Maven的“目标”前后附加自己 的代码，如jar 或 test。 <br />Maven使用<a href="http://jakarta.apache.org/commons/sandbox/jelly">Jelly</a> 脚本语言, 任何合法的jelly标签都可以在maven.xml中使用。 <br />Maven所采用的goal功能是由werkz标签库提供。更多的信息请看 <a href="http://wiki.codehaus.org/maven/WerkzTagDocumentation">wiki页面</a>. <br /><br /><a>简单的maven.xml例子</a><br /><strong>注意</strong>由于Maven并未缺省的定义'compile'目标，下面这个例子没法运行。 <br />这是一个简单的maven.xml例子 <br /><br />${goals} <br />Now attaining goal number ${goalNumber}, which is ${goal} <br /><br />你可能会注意到这里一些有意思的东西，下面我们将逐一解释。 <br /><br /><a>project节点</a><br />project节点, , 是任何 maven.xml 文件的根节点。 <br />项目节点有一个缺省的属性：default="nightly-build"，如果用户只是简单键入 没有参数的maven命令，Maven就会用nightly-build 目标作为缺省目标。 <br />接下来是几个名字空间的声明，如： </p>
				<ol>
						<li>xmlns:j="jelly:core" <br />所有以j:作为前缀的节点，Jelly都会把它视为在core标识下 预定义的标签库。 
</li>
						<li>xmlns:u="jelly:util" <br />所有以u:作为前缀的节点，Jelly都会把它视为在标识下 预定义的标签库。 <br /><br />所有在maven.xml文件使用的Jelly标签库，都<strong>必须</strong>在project节点中定义，并且 分配一个名称空间前缀。 <br />Maven已经预先包含了jeez标签库作为空前缀。这个标签库在一个名称空间内包含了 ant 和 werkz 标签库。这样，任何werkz或ant标签都无须名称空间 即可使用，同时也简化了ant的迁移过程。 <br /><br /><a>目标</a><br />goal是一个<a href="http://jakarta.apache.org/commons/jelly/tags.html#jelly:werkz"> werkz 标签</a>，类似于Ant的target；它是包含了一系列可执行标签的容器。 <br />由于jeez 标签库已经由maven预先注册了，一个目标(goal)可以包含任何合法的 Ant 标签。 <br />为了执行在maven.xml中定义的目标，你只需要在命令行中为Maven指定目标名即可。要执行例子中定 义的nightly-build你只需执行命令: <br />maven nightly-build <br /><br />Maven插件定义的目标需要在目标前加上插件名，这样一来，就不会和你自己的goal冲突，如 jar:jar就是 jar 插件定义的目标，用于创建项目的jar包。 <br /><br /><a>Jelly编程</a><br />在每个目标里，由Jelly标签提供功能，让我们来看看例子里的这些代码。 <br />set <br /><br />这行就是一个jelly的core标签set，它使用了project节点中定义的前缀 j: <br />set标签设置了一个由var属性定义的Jelly变量，值由 value 指定。和Ant的proerties不一样，Jelly变量在被赋值后仍可以改变。 <br />mkdir <br /><br />等同于Ant任务 mkdir, 用于创建目录，目录名由变量 ${maven.build.dir}指定。 <br />tokenize <br />${goals} <br />这行执行的是Jelly tokenize 标签。这是Jelly util 标签库中标签， 这个标签库已经在项目节点中预先定义：u: <br />tokenize标签在将节点中的内容分离成一个list，用于后续的处理。 <br /></li>
				</ol>
				<ul>
						<li>var 属性就是将被于新list的变量。 
</li>
						<li>delim 属性是用于分割字符串中的分隔符。 <br /></li>
						<li>在这个例子中，tokenize 标签中节点值是一个变量：goals, 在前几行中，这是一个由逗号分隔、compile 与 test 的字符串。 </li>
				</ul>
				<p>
						<br />
						<br />forEach <br /><br />Now attaining goal number ${goalNumber}, which is ${goal} <br /><br /><br />forEach标签提供简单循环功能，节点值就是循环体。 <br /></p>
				<ul>
						<br />
						<li>items 属性是一个表达式，是在循环过程中需要遍历的值集合。 <br /></li>
						<li>集合中的值被逐个取出，存放在var 属性指定的变量中。你可以在 forEach 循环体访问这个变量。 <br /></li>
						<li>indexVar 属性指定了一个计数器(起始基数为0)变量，用于在处理 过程中计数。 </li>
				</ul>
				<p>
						<br />
						<br />forEach 标签的节点值输出了一些在处理过程中的关于目标的文本，并使用 attainGoal werkz 标签来获得(执行?)这些目标。 <br /><br /><a>Maven 配置</a><br /><br /><a>属性的处理机制</a><br />Maven按下面的顺序依次读入properties文件： </p>
				<ul>
						<li>${project.home}/project.properties 
</li>
						<li>${project.home}/build.properties 
</li>
						<li>${user.home}/build.properties </li>
				</ul>
				<p>
						<br />读入的属性遵循“最后的定义有效”原则。也就是说，Maven依次读入properties文件，以新的定义 覆盖旧的定义。${user.home}/build.properties是Maven最后处理的文件。我们把 这些文件称为Maven处理的标准属性文件集。 <br />另外，上述properties文件处理完毕后，Maven才会开始处理系统属性。所以，如果在命令行中使用 象-Dproperty=value这样的形式来指定的属性，它会覆盖先前定义的同名属性。 <br /><br /><a>插件的属性</a><br />上述属性文件处理完后，Maven才会开始调用插件，但是 PluginManager 会禁止插件 覆盖已经设置的属性值。这和Maven一般的属性处理方式是相反的，这是因为插件只能在Maven内部的 其他部分初始化完毕后才能处理，但是我们又希望以这样顺序去处理属性： <br /></p>
				<ul>
						<li>处理Plug-in 缺省属性 
</li>
						<li>处理${project.home}/project.properties 
</li>
						<li>处理${project.home}/build.properties 
</li>
						<li>处理${user.home}/build.properties </li>
				</ul>
				<p>
						<br />这样一来，即使插件处于属性处理链的后端，也能覆盖插件的任何缺省属性。例如，Checkstyle插件 就定义了如下缺省属性： <br />maven.checkstyle.format = sun <br /><br />你可能已经猜出来了，Checksytle插件把Sun的编码规范作为缺省的格式。但是我们仍然可以在标准属性 文件集的任何一个文件中覆盖这个属性。所以如果在${project.home}/project.properties 文件定义了如下属性值： <br />maven.checkstyle.format = turbine <br /><br />Checkstyle就会使用Turbine的编码规范。 <br /><br /><a>行为属性</a><br />下面的这些属性可以改变Maven的“行为方式”。 <br /><br />属性 <br />描述 <br />缺省值 <br /><br />maven.build.dest <br />目录名，存放编译生成的类 <br />${maven.build.dir}/classes <br /><br />maven.build.dir <br />存放构建结果的目录，如类文件，文档，单元测试报告等等。 <br /><strong>注意：</strong> 在${user.home}/build.properties文件中改变maven.build.dir 的缺省值或许会得到一个 较为个性化的目录布局。但是，这会干扰Maven由从源码开始的编译工作，因为它假设jar包 会被创建到${basedir}/target/目录中。 <br />${basedir}/target <br /><br />maven.build.src <br />源码目录 <br />${maven.build.dir}/src <br /><br />maven.conf.dir <br />配置文件目录 <br />${basedir}/conf <br /><br />maven.docs.dest <br />html格式报告的输出目录 <br />${maven.build.dir}/docs <br /><br />maven.docs.omitXmlDeclaration <br />产生的文档所应包含的xml声明头，如： <br /><br />false <br /><br />maven.docs.outputencoding <br />生成文档的缺省编码 <br />ISO-8859-1 <br /><br />maven.docs.src <br />用户提供的文档目录 <br />${basedir}/xdocs <br /><br />maven.gen.docs <br />xdocs文档转换成html后的输出目录 <br />${maven.build.dir}/generated-xdocs <br /><br />maven.home.local <br />maven用于写入用户信息的本机目录，如解开插件包、缓冲数据。 <br />${user.home}/.maven <br /><br />maven.mode.online <br />是否连接internet <br />true <br /><br />maven.plugin.dir <br />插件的存放目录 <br />${maven.home}/plugins <br /><br />maven.plugin.unpacked.dir <br />用于展开安装插件的目录 <br />${maven.home.local}/plugins <br /><br />maven.repo.central <br />在进行dist:deploy处理的时候，发行包所要部署的目标机器 <br />login.ibiblio.org <br /><br />maven.repo.central.directory <br />在进行dist:deploy处理的时候，发行包所要部署的目标目录。 <br />/public/html/maven <br /><br />maven.repo.local <br />本机repository，用于存储下载的jar包。 <br />${maven.home.local}/repository <br /><br />maven.repo.remote <br />远程repository，如果本机repository没有的jar包，maven会从这里下载。 <br />http://www.ibiblio.org/maven <br /><br />maven.repo.remote.enabled <br />是否使用远程repository。 <br />true <br /><br />maven.scp.executable <br />用于安全拷贝的可执行程序 <br />scp <br /><br />maven.src.dir <br />基础源代码目录 <br />${basedir}/src <br /><br />maven.ssh.executable <br />远程命令可执行程序 <br />scp <br /><br /><a>使用代理</a><br />如果你只能通过代理访问，不要紧，Maven为你提供了下列属性： <br /><br />代理属性 <br />描述 <br /><br />maven.proxy.host <br />代理的IP地址 <br /><br />maven.proxy.port <br />代理端口 <br /><br />maven.proxy.username <br />如果代理需要认证的话，在这里填写用户名。 User name if your proxy requires authentication. <br /><br />maven.proxy.password <br />如果代理需要认证的话，在这里填写密码。 <br />如果你实在需要代理，最好在${user.home}/build.properties文件中指定。 <br />## ---------------------------------------------------------- <br />## ${user.home}/build.properties <br />## ---------------------------------------------------------- <br />. <br />. <br />maven.proxy.host = my.proxyserver.com <br />maven.proxy.port = 8080 <br />maven.proxy.username = username <br />maven.proxy.password = password <br />. <br />. <br /><br /><a>使用多个远程Repositories</a><br />你可以在任何Maven可以处理的属性文件中指定使用多个远程Repositories，如： <br />maven.repo.remote = http://www.ibiblio.org/maven/,http://www.mycompany.com/maven/ <br /><br /><a>项目设置</a><br /><br /><a>开始一个新项目</a><br />如果你是第一次使用Maven，或者开始一个新的项目，你可以使用GenApp来自动创建Maven项目树。 <br />maven -Dpackage=com.mycompany.app genapp <br /><br />执行该命令后，屏幕显示如下： <br />__ __ <br />| / |__ Jakarta _ ___ <br />| |/| / _ V / -_) ' ~ intelligent projects ~ <br />|_| |___,_|_/___|_||_| v. 1.0-beta-9 <br /><br />[mkdir] Created dir: /genapp/src/java/com/mycompany/app <br />[copy] Copying 1 file to /genapp/src/java/com/mycompany/app <br />[mkdir] Created dir: /genapp/src/test/com/mycompany/app <br />[copy] Copying 3 files to /genapp/src/test/com/mycompany/app <br />[copy] Copying 2 files to /genapp <br />[copy] Copying 1 file to /genapp/src/conf <br />BUILD SUCCESSFUL <br />Total time: 3 seconds <br /><br />执行完毕，即生成下面的完整项目目录树： <br />. <br />|-- project.properties <br />|-- project.xml <br />`-- src <br />|-- conf <br />| `-- app.properties <br />|-- java <br />| `-- com <br />| `-- mycompany <br />| `-- app <br />| `-- App.java <br />`-- test <br />`-- com <br />`-- mycompany <br />`-- app <br />|-- AbstractTestCase.java <br />|-- AppTest.java <br />`-- NaughtyTest.java <br /><br /><a>构建</a><br />Maven采用了集中管理库的理念。所有用于构建的jar包都是从集中管理的中心库上取出。目前， 我们的中心库放在<a href="http://www.ibiblio.org/maven">这儿</a><a href="http://www.ibiblio.org/">Ibiblio</a>. 在一个典型的Maven项目中，构建所需的 jar包会从中心库下载。Maven只会取回依赖链条上缺失的包。如果你使用Maven来构建几个项目， 这些项目可能会共享一些依赖包：Maven可以在任意个项目中共享同一个包，而无须在同一系统 中保持一个jar包的多个拷贝。 <br /><br /><a>构建生命周期</a><br /><br /><a>在CVS中存放jar文件</a><br />我们不推荐你在CVS中存放jar包。Maven提倡在本机repository中存放用于构建共享的jar包或 和其他项目包。许多项目都依赖于诸如XML解析器、标准例程，这在Ant构建中，经常会被复制 多份。在Maven中，这些标准例程就存放在本地repository中，供任何项目构建使用。 <br /><a>重载已声明的依赖包</a><br />你可能会发现，在某些情况下允许重载POM中已经声明的依赖包会很方便，甚至很有必要。 你可能会希望使用文件系统中的某个JAR包，或者你希望简单重新指定某个包的版本。对于 这样的情况，Maven提供了一种简单的方式，允许你选择构建所需的jar包。我们严重建议;) 你设置本机repository，但是在简单至上，或在由ant构建迁移的情况下，JAR包重载特性 会显得非常方便。 <br />为了使用JAR包重载特性，你必须将maven.jar.override 属性设置为 on。 只要设置了这个属性，就可以在任何maven处理的属性文件中重载JAR包。 <br />关于JAR重载的指令有两种。第一种允许你指定某个特定的包的路径，作为JAR包；的二种 允许你指定某个特定的JAR包（这个jar包必须已经存在于本机repository）。下面是这两 种方式： <br />maven.jar.artifactId = [path] <br />maven.jar.artifactId = [version] <br /><br />下面是一个使用JAR重载指令的属性文件例子： <br /># ------------------------------------------------------------------------ <br /># M A V E N J A R O V E R R I D E <br /># ------------------------------------------------------------------------ <br />maven.jar.override = on <br /># ------------------------------------------------------------------------ <br /># Jars set explicity by path. <br /># ------------------------------------------------------------------------ <br />maven.jar.a = ${basedir}/lib/a.jar <br />maven.jar.b = ${basedir}/lib/b.jar <br /><br /># ------------------------------------------------------------------------ <br /># Jars set explicity by version. <br /># ------------------------------------------------------------------------ <br />maven.jar.classworlds = 1.0-beta-1 <br /><br /><a>使用SNAPSHOT依赖</a><br />在Maven中，SNAPSHOP是某个特定项目的最新构建的jar包。如果你的项目依赖于另一个频繁变更 的项目，你可以在你的POM中声明SNAPSHOP依赖，以保持与那个项目的同步。例如，在你的POM中 这样写，你可以与<a href="http://jakarta.apache.org/commons/jelly/">Jelly</a>保持 同步更新。 <br />... <br />commons-jelly <br />commons-jelly <br />SNAPSHOT <br />... <br /><br />上述语句的含义是：总是使用Maven repository中最新的Jelly构建包。SNAPSHOT依赖 总会导致依赖失败。在这种情况下，Maven就会去Maven repository取得一个SNAPSHOT 依赖包的拷贝。如果你正在离线工作，Maven就会发出警告：“SNAPSHO依赖包可能已经 过期”。 <br /><br /><a>多项目构建和Reactor</a><br />在Maven中，Reactor是一个用于控制多项目构建的工具。Reactor用Werkz包,并根据每个项目 各自定义的依赖关系来安排构建顺序。Reactor的意图在于：鼓励创建/重构具有更小、更松散、 更有一致性单元的项目。r源于面向组件编程，在向组件编程中，整个系统由许多松散的个体 构成，这些个体需要聚合起来作为一个整体进行部署。 <br />Reactor可以为某个项目集执行一个任意编排的目标列表。所以，如果使用Reactor的话，它 可以用来做项目站点生成，任意jar包生成这样的事情。 <br />目前 <a href="http://db.apache.org/">db.apache.org</a> 站点就是收集了其子项目的 丰富信息、并与一系列的<a href="http://jakarta.apache.org/velocity/">Velocity</a> 模板合成的。这一过程是由 <a href="http://jakarta.apache.org/commons/jelly/">Jelly</a> Velocity 标签库来完成的。<a href="http://cvs.apache.org/viewcvs.cgi/db-site/"> 这里</a>是其中的机制，有兴趣可以看看。 <br />Plexus(一个基于Avalon的容器)组件的manifest是遍历所有Plexus组件、并聚合而成的。这里 使用的还是Velocity模板和Jelly Volocity标签库。 <a href="http://cvs.werken.com/viewcvs.cgi/plexus-components/?cvsroot=plexus">这里</a>是其中的机制，有兴趣可以看看。 <br />这里是一个使用Reactor标签，遍历一系列组件，最后产生项目站点的例子： <br />... Do whatever you want with the harvested information ... <br /><br />如果你需要聚合N个项目的文档，形成一个统一的视图，你可以参考 <a href="http://db.apache.org/">db.apache.org</a>站点，它从所有的子项目中收集 信息，最终形成一个有导航条，邮件列表，开发者列表和源码repository统一的站点。这解决 了在收集子项目信息过程中的冗余、易于产生错误的问题。db.apache.org的子项目只需关注 自身的信息，却可以自动的集成到高层的项目站点中。 <br /><br /><a>离线构建</a><br />如果你需要离线构建，你得在命令行中使用离线选项： <br />maven -o jar:jar <br /><br />这等同于： <br />maven -Dmaven.mode.online=false jar:jar <br /><br />或者你可以在<a href="http://maven.huangdong.com/reference/user-guide.html#Properties_Processing">属性文件</a>中设置 maven.mode.online 属性为false。 <br />在联机模式下，maven总是下载 SNAPSHOT 依赖包, 请参考 <a href="http://maven.huangdong.com/reference/user-guide.html#使用SNAPSHOT依赖">使用SNAPSHOT依赖</a>。如果本机repository 上的当前版本比服务器上的还要新，你也许不想maven覆盖你的当前版本。如果不想下载，你可以 设置属性： <br />maven.repo.remote.enabled=false <br /><br />在maven beta 9版本中，这个属性并没有起作用(新版本已经解决了这个问题)。可以这样来清空 maven.repo.remote 属性： <br />maven.repo.remote.enabled= <br /><br />在命令行或属性文件中设置都一样。 <br />在下面的情形中，你需要同时设置maven.repo.remote.enabled=false maven.mode.online=true：希望javadoc插件的"-link"选项起作用，而又不希望 下载任何(包括snapshot)包。 <br /><br /><a>命令行选项介绍</a><br />如果你用命令行来构建，这里提供了一个关于命令行选项的快速参考。 <br />Options: <br />-D,--define arg 定义一个系统属性 <br />-E,--emacs 输出简洁的日志信息 <br />-X,--debug 输出debug信息 <br />-b,--nobanner 禁止 logo banner <br />-d,--dir arg 设置指定的工作目录 <br />-e,--exception 输出异常堆栈信息 <br />-f,--find arg 通过搜寻项目文件来确定执行的项目文件及其工作目录 <br />-g,--goals 显示可用的目标 <br />-h,--help 显示帮助信息 <br />-i,--info 显示系统信息 <br />-o,--offline 离线构建 <br />-p,--pom arg 指定项目文件 <br />-v,--version 显示版本号 <br /><br /><a>测试</a><br /><br /><a>测试资源</a><br />通常情况下，你需要在测试类路径上为测试指定某些资源。你可以在POM中使用 <br />下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml和.properties为扩展名 的文件： <br />... <br />... <br />... <br /><br />${basedir}/src/test <br />**/*.xml <br />**/*.properties <br /><br />下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml和.properties为扩展名 的文件，但naughty.properties文件除外。请注意增加的project/build/unitTest/resources/excludes 节点： <br />... <br />... <br />... <br /><br />${basedir}/src/test <br />**/*.xml <br />**/*.properties <br /><br />naughty.properties <br /><br /><a>运行一个单独的测试</a><br />下面的命令运行了一个单独的测试： <br />maven -Dtestcase=org.foo.bar.MyTest test:single-test <br /><br /><a>打包</a><br /><a>JAR 资源</a><br />... <br /><br />${basedir}/src/conf <br /><br />*.xml <br />*.properties <br /><br />${basedir}/src/messages <br />org/apache/maven/messages <br />messages*.properties <br /><br /><a>部署</a><br /><br /><a>固化SNAPSHOT依赖</a><br />在开发时使用SNAPSHOT依赖包非常方便，但是在部署的时候，你需要把所有的SNAPSHOT依赖包 固定下来，以便发布一个包含固定jar的版本。如果你发布了一个含SNAPSHOT依赖包的项目，而 这些SNAPSHOT在项目发布后发生了变更，你可能很快就会发现这个版本没法儿工作。 <br />当SNAPSHOT以时间戳为版本号部署到Maven上时，Maven可以识别foo-SNAPSHOT.jar实际上相当 于foo-20030101.010101.jar。当部署的时刻来临，你可以用下面的命令，让Maven把SNAPSHOT 版本号变为时间戳版本号。 <br />maven convert-snapshots <br /><br />Maven会提供交互的方式让你选择哪个SNAPSHOPT依赖包应该固化下来。这一过程结束后，Maven 就会把刚才你的选择写会你的POM。 <br />如果你希望Maven简单的、尽可能最好的固化SNAPSHOT依赖包，你可以用下面的命令： <br />maven convert-snapshots-auto <br /><br /><a>拷贝依赖JAR包</a><br />在maven.xml这样写下面的语句是最简单的拷贝依赖包的方法。 <br />... <br />... <br /><br />用deploy:copy-deps标签你就可以简单的把项目所有的依赖包拷贝到任何 目录，如果希望排除某个依赖包，需要给出一个依赖包的id列表，列表中依赖包就不会被拷贝。 <br /><br />... <br />... <br /><br /><a>命名约定</a><br />这部分将简要的描述项目对象模型(POM)中命名约定。本篇文档希望可以统一各式各样jar包命名 方法，这些jar包一般为java开发者社区广泛使用。 <br /><br /><a>规则和指南</a><br /><a>项目</a><br />一个项目必须由一个唯一的的标识，标识由a-z小写字母和连线号构成，其首字母必须以小写字母 开头。 <br /><br />bar <br />foo <br />... <br /><br />所有项目间的引用都由组id和包id构成。到现在为止，在POM与此相关的是下面将要（上面提到的？）谈到的项目的 依赖声明。 <br />项目的名称应该易于阅读，可用于文档。 <br /><br />bar <br />foo <br />The Grand Master Foo <br />... <br /><br />项目应该有一个组标识，组标识是名称的基础部分。 <br />bar <br />foo <br />The Grand Master Foo </p>
				<p>... <br /><br />所有项目发布的包都应基于项目唯一的标识，并且放在基于项目的组id的目录中。对于上面的 项目来说，假定发布的包是jar类型的包，我们就会有如下目录结构： <br />repository <br />| <br />+-- bar <br />|-- distribution <br />`-- jar <br />|-- foo-1.0.jar <br />`-- foo-2.0.jar <br /><br /><br /><a>依赖</a><br />一个理想的典型依赖声明的例子可能会象这样： <br /><br />yourProject <br />yourArtifact <br />Your Groovey Machine <br />... <br /><br />bar <br />foo <br />1.0 <br /><br />这样一来，依赖于id为foo1.0 版本的bar项目 属于org.foo.bar组。这个依赖会被解析为本地repository中jar文件。上面 的情形假定发布的包是基于包id命名的。因此对于上述依赖，Maven就会采用 foo-1.0.jar作为jar名。 <br />就像用户反映的那样，这种理想的方式并不能适应所有的项目。有几种情形我们必须考虑调整 理想的依赖机制： </p>
				<ul>
						<li>发布的jar包的并未使用项目作为基础名，如xercesImpl就是所有发布的jar包的基础名 它与gump id和maven中的id都不一样。 <br /></li>
						<li>发布的jar包没有使用任何版本声明，如许多commons组件并没有把版本号作为包名的一部分。 <br /></li>
						<li>有些项目即没有使用项目id作为基础名也没有版本声明。例如，最坏的情形是Java Activation Framework 的jar包，它没有遵循其他Sun的命名规则，也没有在jar包中声明 版本号，甚至在manifest中都没有任何版本信息。 <br /><br />在多数情形下，任何例外的情况都可以用 (可选节点)、或者是重命名来解决。 现在，许多Jarkata的产品在repository已经被重命名，因为在不久的未来，绝大多数的Jarkarta的 项目将用maven进行构建。但这不是公司政策，我们不需要解决所有情况的问题。 <br /><br /><a>发布多个包的项目</a><br />Maven的依赖机制完全支持任何形式的多项目包。 Maven's dependency mechanism completely supports multiple project artifacts of any given type. <br />下面的代码包含了ant的主jar包和optional包加上hypothetical包。 <br />ant <br />ant <br />1.4.1 </li>
				</ul>
				<p>ant <br />ant-optional <br />1.4.1 <br />ant <br />poorly-named <br />1.4.1 <br /><br />所以A), B) 和 C)实际上是指向属于同一组的单个包的指针，这就是说，一个单独的依赖就是对某个组中的某个 包的引用。目前artifact如果没有特别说明的话，一般指的是jar包。但是依赖也可能是一个war文件或一个 发行包。我们试图在提供多数情况下(构建大多需要jar包)使用的缺省方式的同时，也顾及灵活性。 <br /><br /><a>远程Repository布局</a><br />这部分文档将对Maven的远程repositories做一个概要的说明。目前，主repository位于 <a href="http://www.ibiblio.org/maven/">Ibiblio</a>，但是你也可以自己创建一 个远程repositories，其结果描述可以在这部分文档中找到。 <br />任何独立的项目在repository都有自己的目录。每个项目有一个唯一的项目id和同名目录， 项目的发行包就放在这个目录中。 <br />项目的目录中可以存放各种各样的artifacts，目前最为广泛使用的两种类型是jar包和发行包 下面是一个远程repository快照： <br />repository <br />| <br />|-- ant <br />| |-- distribution <br />| `-- jars <br />| |-- ant-1.4.1.jar <br />| `-- ant-optional-1.4.1.jar <br />+-- jsse <br />|-- distribution <br />`-- jars <br />|-- jsse.jar <br />|-- jcert.jar <br />`-- jnet.jar <br /><br /><a>本地Repository布局</a><br />应该有一个接口集合的紧凑实现使本地repository目录结构更加随意一些。现在我只使用 了一个类来实现，显得有些臃肿。我还是认为本地和远程repositories应保持相同的结构 但是为了使用更乐于使用，我开始设计一些接口，用于满足用户自己安排自己本地Repository 布局，相似的远程Repositor也在设计中。尽管目前本地repository仍与远程repository 完全一致，我希望听到更多的用户反馈，以促进这些接口的开发，或者完全抛弃它。 <br /><br /><a>生成项目站点</a><br />Maven可以为项目产生一个完成的web站点。这个web站点将包含各种各样、由许多Maven插件 产生的报告，如javadocs，代码度量，单元测试，changlog，及其它... 本节文档接下来的 部分将阐述Maven支持的站点定制选项。 <br /><br /><a>颜色</a><br />考虑到一致性，缺省情况下，所有Maven产生的站点都使用相似的外观。这使用户一眼就能 认出由Maven产生的站点，产生熟悉的感觉，更加方便信息的获取。当然，Maven开发组也 考虑到用户可能会希望定制他们的站点。修改Maven产生的站点，最简单的方法是指定你要 使用的颜色搭配。这只需要在project.properties简单的设置适当的属性 即可。下面是所有可用的属性描述在<a href="http://maven.huangdong.com/reference/plugins/xdoc/properties.html"> xdoc plugin</a>。 <br /><br /><a>风格</a><br />如果你感觉颜色太过于简单，无法满足你的要求，你可以用自己的stylesheet。为了重载 在${basedir}/xdocs/stylesheets/中的maven.css stylesheet，你可以通过设置maven.javadoc.stylesheet 属性来指定你的 javadoc风格。 <br /><br /><a>报告</a><br />最后，如果你希望定制哪些报告需要自动产生，你需要在你的项目描述中包含 <a href="http://maven.huangdong.com/reference/project-descriptor.html#reports">reports</a> 标签库。 到目前为止，如果没有reports标签指定，所有插件报告都会产生。这个标签 允许你选择产生哪些报告而排斥另外一些报告，而且允许你安排顺序。 <br />目前的标准 报告集在xdoc中是硬编码实现的，它们是： <br />maven-changelog-plugin <br />maven-changes-plugin <br />maven-checkstyle-plugin <br />maven-developer-activity-plugin <br />maven-file-activity-plugin <br />maven-javadoc-plugin <br />maven-jdepend-plugin <br />maven-junit-report-plugin <br />maven-jxr-plugin <br />maven-license-plugin <br />maven-linkcheck-plugin <br />maven-pmd-plugin <br />maven-tasklist-plugin <br /><br />如果你希望产生缺省的报告，但是还想增加或删除一两个，最好的方法是：给 xdoc:register-reports目标写一个前置目标(postGoal)。<br /><br /><a>排除所有Maven产生的内容</a><br />某些情况下，用户需要构建只有文档的站点，或是构建聚合许多子项目的站点，但不希望 在站点上有个整体“项目文档”导航条。设置 maven.xdoc.includeProjectDocumentation属性值为no 即可解决这一问题。缺省的，Maven会包含“项目文档”导航条，下面挂的是许多Maven 生成的报告。 " </p>
				<p> </p>
				<br />
				<br />
				<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=79196</p>
				<br />
		</div>
		<div class="postFoot">
				<script src="http://localhost:82/PromoteIcon.aspx?id=79196">
				</script>
[<a title="功能强大的网络收藏夹，一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐" href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'keyit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏到我的网摘</a>]   cqboy发表于 2004年08月19日 15:32:00 </div>
		<link href="http://blog.csdn.net/cqboy/Services/Pingback.aspx" rel="pingback" />
		<!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Descriptionrdf:about="http://blog.csdn.net/cqboy/articles/79196.aspx"dc:identifier="http://blog.csdn.net/cqboy/articles/79196.aspx"dc:title="Maven使用手册"trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=79196" /></rdf:RDF>-->
		<script><![CDATA[unction hide(){showComment();}]]&gt;</script>
		<br />
		<div class="post">
				<div class="postTitle">相关文章：</div>
				<ul class="postText">
						<li>
								<a href="http://blog.csdn.net/qiquan36/archive/2005/04/15/348197.aspx" target="_blank">Maven中文手册</a> 2005-04-15 <a href="http://blog.csdn.net/qiquan36/" target="_blank">qiquan36</a></li>
						<li>
								<a href="http://blog.csdn.net/onlyme/archive/2004/11/16/183724.aspx" target="_blank">Maven 安装实践</a> 2004-11-16 <a href="http://blog.csdn.net/onlyme/" target="_blank">onlyme</a></li>
						<li>
								<a href="http://blog.csdn.net/imdplee/archive/2004/11/18/185242.aspx" target="_blank">Maven vs Ant</a> 2004-11-18 <a href="http://blog.csdn.net/imdplee/" target="_blank">imdplee</a></li>
						<li>
								<a href="http://blog.csdn.net/tehcon/archive/2005/03/27/332184.aspx" target="_blank">Maven Quick Start</a> 2005-03-27 <a href="http://blog.csdn.net/tehcon/" target="_blank">tehcon</a></li>
						<li>
								<a href="http://blog.csdn.net/srx/archive/2006/04/17/666204.aspx" target="_blank">maven2.0学习笔记</a> 2006-04-17 <a href="http://blog.csdn.net/srx/" target="_blank">srx</a></li>
				</ul>
		</div>
<img src ="http://www.blogjava.net/i369/aggbug/86044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-12-07 11:30 <a href="http://www.blogjava.net/i369/articles/86044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven中文手册 </title><link>http://www.blogjava.net/i369/articles/86043.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 07 Dec 2006 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/86043.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/86043.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/86043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/86043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/86043.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Maven				最早始于				Jarkarta Turbine				项目，目的是为了简化构建过程。这个项目下面有				 				几个子项目，每个子项目都有自己的				Ant				文件，但是区别很小，而且生成的				JAR 				文件都要				check in				到				CVS				中。我们希望有一种标准的方式来构建这些项...&nbsp;&nbsp;<a href='http://www.blogjava.net/i369/articles/86043.html'>阅读全文</a><img src ="http://www.blogjava.net/i369/aggbug/86043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-12-07 11:29 <a href="http://www.blogjava.net/i369/articles/86043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MAVEN安装全程指南 </title><link>http://www.blogjava.net/i369/articles/86041.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 07 Dec 2006 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/86041.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/86041.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/86041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/86041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/86041.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td width="97%">
										<div align="center">
												<table cellspacing="0" cellpadding="0" align="center">
														<tbody>
																<tr>
																		<td class="newsTitle">
																				<strong>MAVEN安装全程指南</strong>
																		</td>
																</tr>
														</tbody>
												</table>
												<table cellspacing="0" cellpadding="0">
														<tbody>
																<tr>
																		<td>
																		</td>
																</tr>
														</tbody>
												</table>
												<hr width="99%" size="1" />
												<br />
										</div>
								</td>
								<td width="1%">
								</td>
						</tr>
						<tr>
								<td colspan="3">
										<div align="center">
												<table cellspacing="0" cellpadding="0" width="100%">
														<tbody>
																<tr>
																		<td width="8">
																		</td>
																		<td class="newsDetail" style="LINE-HEIGHT: 160%">
																				<br />
																				<div id="zoom" style="FONT-SIZE: 14px">
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
																								<b style="mso-bidi-font-weight: normal">
																										<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
																										</span>
																								</b>
																								<b style="mso-bidi-font-weight: normal">
																										<span lang="EN-US" style="FONT-SIZE: 12pt">
																												<p>
																												</p>
																										</span>
																								</b>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">1．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<a href="http://archive.apache.org/dist/maven/binaries/下载maven-1.0.2.exe">
																												<font face="Times New Roman">http://archive.apache.org/dist/maven/binaries/</font>
																												<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
																														<span lang="EN-US">下载</span>
																												</span>
																												<font face="Times New Roman">maven-1.0.2.exe</font>
																										</a>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装文件</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">2．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载完毕后，点击安装，选择安装目录为：</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">D:\Maven <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.0.2</chsdate><p></p></font>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">3．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">
																										<font face="Times New Roman">MAVEN_HOME=D:\Maven <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.0.2</chsdate></font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（即</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装目录）</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">4．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">
																										<font face="Times New Roman">path=D:\Maven <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.0.2</chsdate>\bin</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（即</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装目录）</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">5．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建本地依赖库（<span style="COLOR: red">可选</span>）：</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: 15pt; mso-para-margin-left: 2.57gd; mso-char-indent-count: 1.25">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">
																										<font face="Times New Roman">%MAVEN_HOMEE%\bin\install_repo.bat %MAVEN_HOMEE%\.maven\repository 
<p></p></font>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">
																										<span style="mso-spacerun: yes">
																												<font face="Times New Roman">  </font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：这一步是可选的，如果选择本步操作，可能要等待一些时间，因为要下载几个</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red">
																										<font face="Times New Roman">Jars</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">6．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">D:\Maven <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.0.2</chsdate>\lib</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven.jar</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件拷贝到</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">C</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：根目录下，用压缩软件将其解压到</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">c:\maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">7．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">C:\maven\</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">defaults.properties</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，做如下修改：</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">1</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">Maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认的远程依赖库（</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">remote repository</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）是</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">ibiblio.org</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个地方有些人上不去，因此要更改一下。</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">Maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">找寻配置参数的默认的顺序是从</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven.jar</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">defaults.properties</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始。打开该文件，修改：</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">
																										<font face="Times New Roman">maven.repo.remote =<span style="mso-spacerun: yes">     </span>http://apache.linuxforum.net/dist/java-repository, http://dist.codehaus.org, http://mirrors.sunsite.dk/maven/,<span style="mso-spacerun: yes">  </span>http://public.planetmirror.com/pub/maven, http://www.ibiblio.org/maven 
<p></p></font>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当然，如果，远程依赖库如果是自己公司创建的，也需要将本公司的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">web site</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加在上面，当然协议除了</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #333399">
																										<font face="Times New Roman">http://</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">外，还可以是：</span>
																								<font face="Times New Roman">
																										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy">file://</span>
																										<span lang="EN-US" style="FONT-SIZE: 12pt">
																												<p>
																												</p>
																										</span>
																								</font>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">2</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">Maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认的本地文件保存在</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">Document and Setting</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">user.home</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面，非常不便。</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">%MAVEN_HOME%</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下建立一个</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">local</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，将本地的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">repostiory</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">保存在此，以免重装系统丢失。</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven.home.local = ${maven.home}/local 
<p></p></font>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">8．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">cmd</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下进入</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">C:\maven\org\apache\maven\</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，输入如下命令：</span>
																								<font face="Times New Roman">
																										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">native2ascii messages\messages_zh_CN.properties&gt;out.properties </span>
																										<span lang="EN-US" style="FONT-SIZE: 12pt">
																												<span style="mso-spacerun: yes"> </span>
																										</span>
																								</font>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，再将</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">C:\maven\org\apache\maven\messages</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">messages_zh_CN.properties</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件删除，再将刚刚生生成的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">out.properties</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件拷贝到这个目录下，并改名为</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">messages_zh_CN.properties </font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（这是为了解决</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用时会出现乱码，这是由于</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven.jarorg\apache\maven\messages\messages_zh_CN.properties</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个文件的毛病）</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">9．</font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">cmd</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下进入</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">C:\maven</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下，输入如下命令：</span>
																								<font face="Times New Roman">
																										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue">jar cvf C:\maven.jar org *.properties</span>
																										<span lang="EN-US" style="FONT-SIZE: 12pt">
																										</span>
																								</font>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则在</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">C:</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根目录下生成一个新的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven.jar</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，用这个文件替换</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">D:\Maven <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.0.2</chsdate>\lib</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下的</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<font face="Times New Roman">maven.jar</font>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																						<p>
																						</p>
																						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
																								<span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
																										<span style="mso-list: Ignore">
																												<font face="Times New Roman">10．<span style="FONT: 7pt 'Times New Roman'">            </span></font>
																										</span>
																								</span>
																								<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装完成</span>
																								<span lang="EN-US" style="FONT-SIZE: 12pt">
																										<p>
																										</p>
																								</span>
																						</p>
																				</div>
																		</td>
																</tr>
														</tbody>
												</table>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/i369/aggbug/86041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-12-07 11:27 <a href="http://www.blogjava.net/i369/articles/86041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven起步-教你开始使用Maven</title><link>http://www.blogjava.net/i369/articles/86037.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 07 Dec 2006 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/86037.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/86037.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/86037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/86037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/86037.html</trackback:ping><description><![CDATA[
		<div class="title">
				<h2>Maven起步-教你开始使用Maven</h2>
				<a href="http://www.matrix.org.cn/resource/article/43/user.shtml?userid=64751">Revenger</a> 发表于 2005-08-26 08:56:01<br />作者:Timothy;Vincent;Revenger     来源:Maven<br />评论数:6 点击数:7,298     投票总得分:5 投票总人次:1<br />关键字:Maven Ant Java </div>
		<!-- end of div title -->
		<div class="summary">
				<div class="left">
				</div>
				<div class="center">
						<h4>摘要:</h4>如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs，你一定会自问，是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择，将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码，运行测试，生成文档并宿主项目网页。看完本文，你应该能够从头建立一个Maven的项目，使用Maven进行相关管理，创建基于某些感兴趣报告的简单的web站点。 </div>
				<div class="right">
						<div class="help">
								<h4>工具箱</h4>
								<a href="http://www.matrix.org.cn/favorite.shtml?type=article&amp;title=Maven%25E8%25B5%25B7%25E6%25AD%25A5-%25E6%2595%2599%25E4%25BD%25A0%25E5%25BC%2580%25E5%25A7%258B%25E4%25BD%25BF%25E7%2594%25A8Maven&amp;url=resource%2Farticle%2F43%2F43661_Maven.html">本站收藏</a>
								<br />
								<a onclick="javascript:location.href='http://del.icio.us/post?&amp;url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title)" href="http://www.matrix.org.cn/resource/article/43/43661_Maven.html#">美味书签</a>
								<br />
								<a href="http://www.matrix.org.cn/resource/article/43/43661_Maven.html#avote">投票评分</a>
								<br />
								<a href="http://www.matrix.org.cn/resource/article/43/43661_Maven.html#areview">发表评论</a>
								<br />
								<a title="点击后直接粘贴即可" onclick="copyLink();" href="http://www.matrix.org.cn/resource/article/43/43661_Maven.html#">复制链接</a>
								<br />
						</div>
				</div>
		</div>
		<!-- end of summary line -->
		<div class="overflow" id="text">
				<center>
						<b>
								<span style="FONT-SIZE: 20px">Maven起步</span>
						</b>
				</center>
				<br />
				<center>作者：Timothy M.O'Brien, Vincent Massol</center>
				<br />
				<center>翻译：<span style="COLOR: maroon"><a href="http://www.matrix.org.cn/user.shtml?username=Revenger" target="_new">Revenger</a></span></center>
				<br />
				<br />
				<span style="COLOR: purple">版权声明</span>：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明<br />英文原文地址:<br /><a href="http://www.onjava.com/pub/a/onjava/excerpt/mavenadn_ch01/index.html" target="_new">http://www.onjava.com/pub/a/onjava/excerpt/mavenadn_ch01/index.html</a><br />中文地址:<br /><a href="http://www.matrix.org.cn/resource/article/43/43661_Maven.html" target="_new">http://www.matrix.org.cn/resource/article/43/43661_Maven.html</a><br />关键词： Maven Ant Java<br /><br /><br /><br /><br /><span style="FONT-SIZE: 16px"><span style="COLOR: red">编者注：</span></span><br /><br />如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs，你一定会自问，是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择，将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码，运行测试，生成文档并宿主项目网页。<br /><br />O'Reilly's的新书Maven:A Developer's Notebook帮你提升你的项目、使其尽快的运行起来，同时也提供了对Maven插件及其团队协作等高级特性的深度考察。在“Maven Jump-Start” (656K PDF)的示范章节中，作者Vincent Massol和Timothy M.O'Brien向你展示了如何安装Maven，如何开始你初次的构建，研究如何使其与IDEs集成极其资源管等特性。<br /><br />Vincent Massol是Jakarta Catus framework（框架）的创建者。其后他花费4年的时间在几个大项目（主要是J2EE）的架构技术上。他现在是Pivolis的创办人和CTO,这是一家专注于应用敏捷方法进行软件开发的公司。他现在居住在法国的首都City of Light（巴黎）。<br /><br />Timothy M. O'Brien作为一个专业的歌手/程序员现正在芝加哥地区工作和生活。<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_082227_ELNKSpEbYq.jpg" onload="javascript:imgLoad(this);" border="0" resized="0" /><br /><br /><br />让我们开始使用Maven。在本章结束时，你应该能够从头建立一个Maven的项目，使用Maven进行相关管理，创建基于某些感兴趣报告的简单的web站点。<br /><br /><b><span style="FONT-SIZE: 20px">安装Maven</span></b><br />开始本书以前，你有一些必备的安装工作。本书中的例子用Java1.4.2编写，Maven能够兼容Java1.4.2和Java1.5.0。本书中所写Maven的最新版本是在编写本书时发布的—Maven 1.0.2。除JDK和Maven1.0.2之外，你还需要连接到Internet，Maven将通过公网站点下载相关其需要的。那么，前进，安装Maven吧。<br /><br /><b>我该如何做？</b><br />从Apache Software Foundation(ASF)下载Maven。进入http://maven.apache.org/从左侧的导航菜单中的Getting Maven菜单选择下载。它将带你进入一个让你选择Windows 安装包、zip文件、tar'd.bzip文件或者tar'd.gzip文件。下载适合你平台的分类。<br /><br /><b>我该如何做？</b><br />从Apache Software Foundation(ASF)下载Maven。进入http://maven.apache.org/从左侧的导航菜单中的Getting Maven菜单选择下载。它将带你进入一个让你选择Windows 安装包、zip文件、tar'd.bzip文件或者tar'd.gzip文件。下载适合你平台的分类。<br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>某些Developer's Notebook中涉及的插件未与Maven1.0.2<br />绑定。请参考第6章并且附录A有安装Maven所需插件的全部<br />列表以及详细说明。</center><br /><br /><br />在Microsoft Windows平台，下载Windows安装包（maven-1.0.2.exe），跟随自动安装过程中的提示。在使用Maven Windows 安装器进行安装后，你应该定义一个用户环境变量，MAVEN_HOME，指向你本地的Maven安装。你此时需要进入控制面版→系统→高级选择环境变量按钮，添加%MAVEN_HOME%\bin到你的PATH环境变量。进入命令提示行运行cmd.exe，如果Maven安装成功，你将能够看到命令行有下面的输出：<br />C:\dev\mavenbook\code&gt;maven -v<br />__  __<br />|  \/  |__ _Apache__ ___<br />| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~<br />|_|  |_\__,_|\_/\___|_||_|  v. 1.0.2<br /><br />如果你愿意安装Maven到一个除了C:\Program Files\Apache Software Foundation\Maven 1.0.2的目录，你也可以下载Maven1.0.2.zip文件，解压缩到任何目录。设置MAVEN_HOME指 向到Maven解压缩的目录，并且添加%MAVEN_HOME%\Bin到你的PATH环境变量。<br /><br />在Unix平台，下载tar'd.zip文件（Maven-1.0.2.tar.gz）并接压缩tar xvzf maven-1.0.2.tar.gz到你选择的目录。本试验假设你解压Maven到/usr/local/maven-1.0.2目录下。你此时需要设置两个环境变量，MAVEN_HOME和PATH。下面的命令为这两个变量设置适当的值：<br />[tobrien@mavenbook tobrien]$ export MAVEN_HOME=/usr/local/maven-1.0.2<br />[tobrien@mavenbook tobrien]$ export PATH=${PATH}:${MAVEN_HOME}/bin<br />如果Maven被成功安装到你的机器，你能够看到与Windows系统同样的输出。恭喜！你已经成安装了Maven。<br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>有些人喜欢保存本地应用程序在Unix下的/opt目录或<br />Windows下的c:\apps。你可以根据个人喜好安装Maven。</center><br /><br /><b>刚刚发生了什么？</b><br />你刚刚安装了Maven1.0.2并且配置了一些环境变量。是的！一旦你对MAVEN_HOME进行了有效的设置或是maven.bat或maven.sh已经存在，你已经能够完成Developer's Notebook本次的实验。<br /><br /><b>关于....<br />          ..Maven 2?</b><br />是时机提及Maven 2（有时也被称为“m2”）。Maven 2完成了对Maven 1的重写。重写的首要目的是要提供了强大的Jave构建和包含API的项目，允许Maven被植入任何地方，尤其是高级别的产品如IDEs、质量工具、报告工具等这些。Maven 2构建生命周期的概念正式话，其比Maven更易扩展。<br /><br />Maven 1和Maven 2有许多共同点，但它们还有几个主要的不同之处。在书中的各个部分我们尽可能提示你所希望了解的那些不同之处。更多关于Maven 2的信息，请转到http://maven.apache.org/下载Maven 2的体验版本，并加入Maven用户或开发者邮件列表。如果你听过Continuous Integration，你可能也想看一看命名为Continuum的Maven子项目，地址在http://maven.apache.org/continuum。<br /><br /><b><span style="FONT-SIZE: 16px">开始一个新的项目</span></b><br />创建新项目的争论一部分在于有很大部分的工作努力被用到在“发展基础设施”上—自动构建、单元测试、文档、项目报告等。使用Maven你可以加速这个过程，生成项目的框架使其作为新应用的种子。<br /><br /><br /><b>我该如何做？</b><br />Maven拥有一个应用程序生成插件（Genapp）你能通过其创建一个新项目。首先创建一个空的目录c:\dev\mavenbook\code\genapp\test-application这将成为应用程序生成后的处所。通过执行genapp这个目标来运行Genapp插件，选择默认的模版并且提供一些你的新项目的相关信息。<br />C:\dev\mavenbook\code\genapp\test-application&gt;maven genapp<br /><pre class="overflow">__ __<br />| \/ |__ _Apache__ ___<br />| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~<br />|_| |_\__,_|\_/\___|_||_| v. 1.0.2<br />Attempting to download commons-jelly-tags-interaction-20030211.143817.jar.<br />4K downloaded<br />Enter a project template to use: [default]<br /><b><a class="wiki_link" title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Enter">Enter</a></b><br />Please specify an id for your application: [app]<br />test-application<br />Please specify a name for your application:  <b><a class="wiki_link" title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Example Application">Example Application</a></b><br />Test Application<br />Please specify the package for your application: [example.app]<br />mdn.testapp<br />build:start:<br />genapp:<br />[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\<br />src\java\mdn\testapp<br />[copy] Copying 3 files to C:\dev\mavenbook\code\genapp\test-application\<br />src\test\mdn\testapp<br />[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\<br />[copy] Copying 2 files to C:\dev\mavenbook\code\genapp\test-application\<br />BUILD SUCCESSFUL</pre><br /><br />本插件会要求用户一些输入，从这个输出内容你可以看到你使用了默认的（defalut）应用程序模板，并且你提供了新项目的应用程序ID、name，和包名。默认的（default）应用程序模板创建了一个单独的类，mdn.testapp.app，和一个静态main函数和两个JUnit测试。<br /><br />Maven的应用程序生成插件生成了下面的目录和文件：<br /><pre class="overflow">test-application/<br />project.properties<br />project.xml<br />src/<br />conf/<br />app.properties<br />java/mdn/testapp/<br />App.java<br />test/mdn/testapp/<br />AbstractTestCase.java<br />AppTest.java<br />NaughtyTest.java</pre><br />所有Maven项目有一个参考了项目对象模型（POM）的标准目录结构, （as described shortly）。如果你有一些现存的类你想添加到一个项目，添加它们到src/java，如果你有一些单元测试将它们添加到src/test。如果这些已有的类和单元测试依赖一些外部的苦，你将在随后的章节看到如何添加一个附属。xdos目录包含了格式为XDoc的项目文档。<br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>请注意Maven1.0.2装载的Genapp插件版本创建了非标准<br />的布局。在Maven项目中src/java和src/test不再出现<br />在固有的源代码和单元测试位置。取而代之的是你可<br />以使用src/main/java和src/test/java。为了改变这些，<br />修改你项目的xml文件，改变src/java的引用为src/main-<br />/java，src/test的引用为src/test/java。更多的信息，<br />请参见“Maven Conventions”,地址在<br />http://maven.apache.org/-reference/conventions.html。</center><br /><br />project.xml是项目的描述符；它是一个内容为POM的XML文件。让我们看看这个project.xml的拷贝，其已经定义了这个项目：<br /><br /><pre class="overflow">&lt;project&gt;<br />&lt;pomVersion&gt;3&lt;/pomVersion&gt;<br />&lt;artifactId&gt;test-application&lt;/artifactId&gt;<br />&lt;name&gt;Test Application&lt;/name&gt;<br />&lt;currentVersion&gt;1.0&lt;/currentVersion&gt;<br />&lt;organization&gt;<br />&lt;name&gt;Your Organization&lt;/name&gt;<br />&lt;url&gt;http://www.someorganization.biz/&lt;/url&gt;<br />&lt;logo&gt;http://www.someorganization.biz/logo.gif|jpg|...&lt;/logo&gt;<br />&lt;/organization&gt;<br />&lt;inceptionYear&gt;2005&lt;/inceptionYear&gt;<br />&lt;package&gt;mdn.testapp&lt;/package&gt;<br />&lt;logo&gt;http://yourproject/logo.jpg|gif|...&lt;/logo&gt;<br />&lt;description&gt;<br />An example project<br />&lt;/description&gt;<br />&lt;shortDescription&gt;<br />How to use maven in different situations<br />&lt;/shortDescription&gt;<br />&lt;!-- Many Elements Omitted (see generated POM) --&gt;<br />&lt;dependencies/&gt;<br />&lt;build&gt;<br />&lt;sourceDirectory&gt;src/java&lt;/sourceDirectory&gt;<br />&lt;unitTestSourceDirectory&gt;src/test&lt;/unitTestSourceDirectory&gt;<br />&lt;unitTest&gt;<br />&lt;includes&gt;<br />&lt;include&gt;**/*Test.java&lt;/include&gt;<br />&lt;/includes&gt;<br />&lt;excludes&gt;<br />&lt;exclude&gt;**/NaughtyTest.java&lt;/exclude&gt;<br />&lt;/excludes&gt;<br />&lt;/unitTest&gt;<br />&lt;resources&gt;<br />&lt;resource&gt;<br />&lt;directory&gt;src/conf&lt;/directory&gt;<br />&lt;includes&gt;<br />&lt;include&gt;*.properties&lt;/include&gt;<br />&lt;/includes&gt;<br />&lt;/resource&gt;<br />&lt;/resources&gt;<br />&lt;/build&gt;<br />&lt;/project&gt;</pre><br /><br />该文件告诉Maven有关你项目的全部。build元素定位应用程序原码，单元测试和资源文件包的位置。name, artifactId, currentVersion, inceptionYear, description。<br />shortDescription标识该项目并且提供了该项目的信息被用作完成品的名字来创建项目。<br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>如果你工作在已有的Maven项目，你应该看到id元素在<br />artifactId的位置。该id元素已经不被赞成使用，<br />你可以用artifactId替代。</center><br /><br />resources元素被用于JAR插件拷贝资源到JAR生成物。在该元素你指定一批资源到资源库。本例中，自src/conf的资源将被复制到classpath的根目录。换言之，app.properties资源将被复制到所生成的JAR生成物的根目录。如果你想所有位于src/conf的*.properties资源和*.xml资源在mdn.testapp包中生成的JAR有效，你可以按照以下来指定targetPath：<br /><pre class="overflow">&lt;resource&gt;<br />&lt;directory&gt;src/conf&lt;/directory&gt;<br />&lt;targetPath&gt;mdn/testapp&lt;/targetPath&gt;<br />&lt;includes&gt;<br />&lt;include&gt;*.properties&lt;/include&gt;<br />&lt;include&gt;*.xml&lt;/include&gt;<br />&lt;/includes&gt;<br />&lt;/resource&gt;</pre><br />project.properties让你能够定制Maven及其插件在本项目中的行为。你将在看过本书之后使用该文件定制所生成web站点的品质和JAR文件的内容。<br /><br /><span style="COLOR: red">提示</span><br /><center>关于在没有Genapp插件来生成新Maven项目的快速入<br />门指导，参见BrettPorter的“The Ten Minute Test”，<br />地址在http://maven.apache.org/start/ten-minute-<br />test.html。</center><br /><br /><b>关于...<br />... Maven在有关协作项目中跟踪信息的能力？</b><br />为简化本例，我们从project.xml文件中去掉了一些初期显示的描<br />述项目邮件列表、知识库、开发者和web站点的元素。第4、5章深<br />入更多有关使用Maven发布web站点和在现有源码库中工作的细节。<br /><br /><br /><b>在代理服务器下使用Maven</b><br />Maven依赖于Internet连接，其通过HTTP下载相关的插件。如果你工作在公共环境，你可能需要配置Maven来与工作代理服务器系统。<br /><br /><br /><b>我该如何做？</b><br />你可能需要设置你项目中project.properties文件的一些属性。project.properties文件允许你通过设置命名的属性来定制Maven的行为。配置代理服务器，放置下面的project.properties到与你项目中project.xml文件同样的位置：<br /><span style="COLOR: blue">maven.proxy.host = proxy.company.com<br />maven.proxy.port = 80</span><br />并且，如果你需要连接到一个代理服务器必须有NTLM的授<br />权，设置以下属性：<br /><span style="COLOR: blue">maven.proxy.ntlm.username = tobrien<br />maven.proxy.ntlm.password = myp@ssw0rd</span><br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>在第二章，你将学到user-specific属性将被定义在<br />~/build.properties或%USERPROFILE%\build.properties 文件。现在，如果你需要完成本试验，在 project.properties里定义这些属性。</center><br /><br /><b><span style="FONT-SIZE: 16px">编译和测试一个项目</span></b><br />你拥有了一个包含一个类文件和单元测试文件的项目。下<br />面，让我们够见这个项目和运行应用程序类吧。<br /><br /><b>我该如果做？</b><br />通过执行jar:jar goal来创建一个包含应用程序的类的jar<br />文件。JAR插件定义了一个速记目标命名为jar其依赖之前的jar:jar goal。执行任何一个目标将得到相同的结果。所有的插件都定义了一条这样的捷径；例如，测试目标执行的是Test插件里的test:test goal。执行jar goal和maven jar：<br /><pre class="overflow">C:\dev\mavenbook\code\genapp\test-application&gt;maven jar<br />__ __<br />| \/ |__ _Apache__ ___<br />| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~<br />|_| |_\__,_|\_/\___|_||_| v. 1.0.2<br />Attempting to download junit-3.8.1.jar.<br />118K downloaded<br />build:start:<br />java:prepare-filesystem:<br />[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\<br />target\classes<br />java:compile:<br />[echo] Compiling to C:\dev\mavenbook\code\genapp\test-application/<br />target/classes<br />[echo]<br />[javac] Compiling 1 source file to C:\dev\mavenbook\code\genapp\testapplication\<br />target\classes<br />java:jar-resources:<br />Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\target\<br />classes<br />test:prepare-filesystem:<br />Compiling and Testing a Project 9<br />[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\<br />target\test-classes<br />[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\<br />target\test-reports<br />test:test-resources:<br />test:compile:<br />[javac] Compiling 3 source files to C:\dev\mavenbook\code\genapp\testapplication\<br />target\test-classes<br />test:test:<br />[junit] Running mdn.testapp.AppTest<br />[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.078 sec<br />jar:jar:<br />[jar] Building jar: C:\dev\mavenbook\code\genapp\test-application\<br />target\test-application-1.0.jar<br />BUILD SUCCESSFUL<br />Total time: 9 seconds</pre><br /><br />Maven创建一个target（目标）目录来保存中间文件和JAR文件。在JAR首次被建立后，按照下面执行App类。<br /><pre class="overflow">C:\dev\mavenbook\code\genapp\test-application&gt; java ^<br />More? target\test-application-1.0.jar mdn.testapp.App<br />Hello World!</pre><br />如果你想重复此项工作，运行maven clean来移除target目录重新构建。<br /><br /><b>刚刚发生了什么？</b><br />当你运行jar目标时，Maven使用JAR插件来创建了一个JAR生成物。首先，Maven找到一系列的目标以便能够创建这个应用程序的JAR文件；JAR插件有一个其它目标所依赖于目标的jar:jar goal，反过来，它也依赖于其他的目标。Maven找出下列需要的目标来执行：java:prepare-filesystem，java:compile，java:jarresources，<br />test:prepare-filesystem，test:test-resources，test:compile，and test:test。<br /><br />Maven查看其需要执行目标中的Test插件来执行单元测试，并且检查本地Maven库中的JUnit JAR文件。因为你还没有使用过Maven，所以它将从位于http://www.ibiblio.org/<br />maven/的Maven默认库中下载junit-3.8.1.jar。你将在本章后学习到有关Maven本地库和Maven强大的相关管理能力的内容。<br /><br /><br /><b><span style="FONT-SIZE: 16px">与项目对象模型一同工作</span></b><br />Project Object Model（POM）是Maven的重要部分，你将与其一同工作贯穿本书。<br /><br /><br /><b>我该如何做？</b><br />POM同样涉及到项目的描述。project.xml描述了项目的源代码、开发者、源控制，许可和标示信息譬如项目名称和发起组织。Maven打破了过去传统的构建系统；取而代之的是为每个构建提供了外在说明，Maven使用声名的方法管理构建。换句话说，你不用过多的告诉Maven做什么，Maven知道去查找基于project.xml中的内容。另一方面，Ant以命令方式进行项目构建；你最终要告诉Ant编译这个文件，建立这个目录，绑定这些文件到WAR等等。Maven维护一个插件的分类来与标准的POM—一个结构声明、标示和内容工作。<br /><br />如果你看了上次练习所生成的project.xml文件，你将注意到许多元素都在上次讨论中被忽略。下面的XML列出了POM中顶级的元素，（in the order in which they are expected:<br />）：<br /><pre class="overflow">&lt;project&gt;<br />&lt;extend/&gt;<br />&lt;pomVersion/&gt;<br />&lt;id/&gt;<br />&lt;name/&gt;<br />&lt;groupId/&gt;<br />&lt;currentVersion/&gt;<br />&lt;organization/&gt;<br />&lt;inceptionYear/&gt;<br />&lt;package/&gt;<br />&lt;logo/&gt;<br />&lt;gumpRepositoryId/&gt;<br />&lt;description/&gt;<br />&lt;shortDescription/&gt;<br />&lt;url/&gt;<br />&lt;issueTrackingUrl/&gt;<br />&lt;siteAddress/&gt;<br />&lt;siteDirectory/&gt;<br />&lt;distributionSite/&gt;<br />&lt;distributionDirectory/&gt;<br />&lt;repository/&gt;<br />&lt;versions/&gt;<br />&lt;branches/&gt;<br />&lt;mailingLists/&gt;<br />&lt;developers/&gt;<br />&lt;contributors/&gt;<br />&lt;licenses/&gt;<br />&lt;dependencies/&gt;<br />&lt;build/&gt;<br />&lt;reports/&gt;<br />&lt;properties/&gt;<br />&lt;/project&gt;</pre><br />本章探究更多以上XML列出的元素，包括contributors，developers，dependencies，reports和repository。本章的式样将提供这些细节，但你应该使用上面XML的摘录来以适当的顺序放置这些元素到你的project.xml中。<br /><br /><b>列出有效的Goals</b><br />当你使用Maven时，你将执行目标。Maven插件是一组相关的插件。例如，要为一个项目创建JAR文件，你将如下所示执行JAR插件中的jar:jar goal。<br />C:\dev\mavenbook\code\genapp&gt; maven jar:jar<br />冒号之前的jar分类这个目标属于JAR插件。查看全部的JAR插件列表，键入以下命令：<br />C:\dev\mavenbook\code\genapp&gt; maven -P jar<br />__ __<br />| \/ |__ _Apache__ ___<br />| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~<br />|_| |_\__,_|\_/\___|_||_| v. 1.0.2<br />Goals in jar<br />============<br />[jar] Create the deliverable jar file.<br />deploy ......................... Deploy a jar to the remote repository<br />deploy-snapshot ................ Deploy a snapshot jar to the remote<br />repository<br />install ........................ Install the jar in the local repository<br />install-snapshot ............... Install a snapshot jar in the local<br />repository<br />jar ............................ Create the deliverable jar file.<br />snapshot ....................... Create a snapshot jar, ie '<br />id-YYYYMMDD.hhmmss.jar'<br />Plugin for creating JAR files. Requires Maven 1.0 RC2.<br /><br />如果你需要查看每个有效的插件和目标，输入下面内容：<br /><span style="COLOR: blue">C:\dev\mavenbook\code\genapp\test-application&gt; maven -g | more</span><br />全部的插件可能使人有些畏惧，Maven有关于一切的插件，从生成项目文件到IDEs到生成WAR文件以及开始和停止应用服务器。你将在下面的实验中学习到一些更有用的插件。<br /><br /><b><span style="FONT-SIZE: 16px">生成调试信息</span></b><br />现在，你可能已经注意到Maven执行了许多繁重的工作。如果你使用Ant，你可能已经开始编写Ant的build.xml文件并且添加编译.jar任务和单元测试。Maven隐藏了许多复杂性，但当调试问题时，它也能够查看“幕后”。这个能力运行于Maven的调试模式并且这个工具打印输出每个构建的细节重要的是你可以根据需要来验证构建是否正确执行。<br /><br /><br /><b>我该如何做？</b><br />本次实验，参考上一个测试应用程序。当你运行maven test，你将收到如下信息：<br /><pre class="overflow">java:compile:<br />[echo] Compiling to <br />C:\dev\mavenbook\code\genapp\test-application/<br />target/classes<br />[echo]<br />java:jar-resources:<br />[...]</pre><br /><br />在执行java:comile或java:jar-resources目标时到底发生了什么？执行构建项目中运行maven -x test将显示全部目标的调试信息。让我们来是一下，把注意力放在最早的第三个目标上。运行maven -x test生成下面的输出：<br /><br /><pre class="overflow">[...]<br />java:compile:<br />[echo] Compiling to C:\dev\mavenbook\code\genapp\test-application/<br />target/classes<br />[javac]  <b><a class="wiki_link" title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=DEBUG">DEBUG</a></b>  fileset: Setup scanner in dir<br />C:\dev\mavenbook\code\genapp\test-application\src\java with<br />patternSet{ includes: [ ] excludes: [**/package.html] }<br />[javac]  <b><a class="wiki_link" title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=VERBOSE">VERBOSE</a></b>  mdn\testapp\App.java omitted as mdn/testapp/App.class<br />is up to date.<br />java:jar-resources:<br /><b><a class="wiki_link" title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=DEBUG">DEBUG</a></b>  FileSet: Setup scanner in dir<br />C:\dev\mavenbook\code\genapp\test-application\src\conf with<br />patternSet{ includes: [*.properties] excludes: [ ] }<br /><b><a class="wiki_link" title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=VERBOSE">VERBOSE</a></b>  app.properties omitted as app.properties is up to date.<br />[...]</pre><br /><br />java:compile的打印输出任务可能看起来很熟悉。它是Ant的echo和javac任务的输出。Maven常常使用Ant的进程来执行常用操作如：拷贝、删除、编译和创建JAR文件。<br /><br /><b>刚刚发生了什么？</b><br />这两个目标执行的都是非常简单的调试输出。java:compile目标简单的扫描源目录中java源码中较新的相关类文件。java:jar-resources目标寻找资源中包含的JAR文件。更复杂的如test:test将产生有关虚拟机和类加载器的调试信息。<br /><br />当Maven有问题或某个目标抛出异常，Maven将简单打印较少的错误信息来告诉你有错误发生。如果你需要等多信息，并且看到堆栈跟踪，添加-e标志到命令行。与-e标志一起，Maven将打印完整的堆栈信息当其遇到错误时。<br /><br /><b><span style="FONT-SIZE: 16px">添加依赖关系</span></b><br />你有了一个拥有单个类文件并且已经成功编译执行的项目。下面，你将添加一个依赖关系到项目描述器并且开始使用Maven管理项目依赖关系。本次实验的目的是，假设你需要工作在Spring框架中。添加Spring框架-spring-core-1.1.4.jar和spring-web-1.1.4.jar的依赖关系。<br /><br /><br /><b>我该如何做？</b><br />首先，你需要根据需要定位Maven默认中心源码库中的JAR文件。ibiblio.org在http://www.ibiblio.org/maven/提供了这些。在Web浏览器中加载这个URL你将看到一系列的目录；我们关心的是springframework的目录，springframework下子目录的结构如下所示：<br />http://www.ibiblio.org/maven<br />/springframework<br />/jars<br />spring-core-1.1.4.jar<br />spring-dao-1.1.4.jar<br />spring-web-1.1.4.jar<br /><br />依照人造物，你使用dependency—groupId, artifactId和version三个元素。你能够添加两个依赖关系的完成品以替代test-application/project.xml中的dependencies元素如下所示：<br /><pre class="overflow">&lt;dependencies&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;springframework&lt;/groupId&gt;<br />&lt;artifactId&gt;spring-core&lt;/artifactId&gt;<br />&lt;version&gt;1.1.4&lt;/version&gt;<br />&lt;/dependency&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;springframework&lt;/groupId&gt;<br />&lt;artifactId&gt;spring-web&lt;/artifactId&gt;<br />&lt;version&gt;1.1.4&lt;/version&gt;<br />&lt;/dependency&gt;<br />&lt;/dependencies&gt;</pre><br /><br />现在，运行jar目标并且看看Maven的输出吧；它将包含下面如下这些。<br /><pre class="overflow">Attempting to download spring-core-1.1.4.jar.<br />266K downloaded<br />Attempting to download spring-web-1.1.4.jar.<br />111K downloaded</pre><br /><br />图1-1显示了jar目标触发的一系列事件：<br />1.Maven查看POM,依据project.xml的定义，看到在springframework组中的两个人造物的依赖关系。它将载你本地Maven的资源库中检查spring-core-1.1.4.jar和spring-web-1.1.4.jar。<br />2.当Maven找不到这些文件，它将到http://www.ibiblio.org/maven/springframework/jars/寻找JAR文件。这些JAR文件会被下载并放置于你本地Maven的资源库中。它们也被添加到你项目的classpath中。下次在你的项目查询这些文件时，Maven将在你本地的资源库中提供它们。<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_083532_ljdAQdmJBU.jpg" onload="javascript:imgLoad(this);" border="0" resized="0" /><br />图1-1.Maven本地和远程资源库为test application项目提供的spring Jar。<br /><br /><b>刚刚发生了什么？</b><br />Maven为你节省了相当的时间和不必要的麻烦。Maven到来之前，依赖关系常常被捆绑到一个项目的目录或者项目应该指向到添加正确的JAR到你的classpath。使用Maven管理依赖关系显然有着明显的优势；作为初学者，如果你的项目依赖30个外部的JAR文件，这就不需要在你的资源库中存储成兆的JAR文件。这意味着当你在项目的外部检查资源控制的时候更少的存储空间和更快的下载时间。另外，如果你有多个项目依赖相同的外部依赖，Maven仅需要下载一次依赖关系，并且每个项目引用一个单独的副本在你本地的资源库中。当依赖关系能够从Maven资源库远程下载的时候，没有强制的原因让你存储你项目的依赖关系的版本。<br /><br />当Maven下载依赖关系，其在你本地的机器上从远程的Maven资源库拷贝一个文件到你本地的Maven资源库。Maven如何定位依赖关系的？它使用project.xml中dependency元素的信息，如图1-2所示。<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_083654_HXMZakvKqI.jpg" onload="javascript:imgLoad(this);" border="0" resized="0" /><br />图1-2.POM和Maven资源库的映射。<br /><br />指定的groupId告诉Maven查看特定的目录-springframework。指定type告诉Maven查找特定的子目录如jar和war（注意s是Maven附加到type元素上的）；本例中，type是被忽略的，JAR类型是默认类型。当你指定了artifactId，你正告诉Maven哪个文件将从jar目录下载。顶级目录表现为组标示符，JAR文件名的第一部分表现为artifact标示符，文件名最后的部分，包括扩展名表现为version标示符。Maven使用下面的公式来决定一个来自于资源库中的依赖关系。[REPO_ROOT]参考你远程的资源库：<br /><pre class="overflow">[REPO_ROOT]/&lt;groupId&gt;/&lt;type&gt;s/&lt;artifactId&gt;-&lt;currentVersion&gt;.&lt;type&gt;</pre><br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>Maven2.0的说明中，资源库可能开始于类似Java包的<br />结构。作为springframework的替代，groupId被提议<br />的结构为org.springframework。另外，每个版本将有<br />一个分隔目录用以增加Maven资源库的效率。更多有关<br />改变的提交建议，参见http://docs.codehaus.org/display/<br />MAVEN/Repository+Layout+-+Final。</center><br /><br />一个本地的资源库来处理依赖关系。在Unix机器上，你的Maven资源库能在~/.maven/repository目录找到，在Windows机器上，你的Maven的资源库在你的%USERPROFILE%目录。如果你看一看本地Maven的资源库，你将会注意到它正包含一个springframework的目录。%USERPROFILE%\.maven\repository\springframework\jars目录包含spring-core依赖关系的两个：spring-core-1.1.4.jar文件和spring-core-1.1.4.jar.md5文件,其包含MD5文件用于验证sprint-core JAR文件的完整性。Maven 1当前并没有使用MD5来验证完成品的完整性，但在将来的版本可能会用其来验证完成品的完整性。<br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>在Windows机器上，%USERPROFILE%通常决定于C:\D-<br />ocuments and Settings\vmassol这种目录。%USERPR-<br />OFILE%被用在Unix的主目录。（%USERPROFILE% is<br />used in the spirit of the abbreviation for a Unix home directory。）</center><br /><br /><b>关于...<br />...使用id元素?</b><br /><br />如果你工作在现存的Maven项目，你可能有依赖关系使用id元素。下面的dependencies元素示范了使用单独id元素来附加Jakarta Commons Math的1.0版本：<br /><pre class="overflow">&lt;dependencies&gt;<br />&lt;dependency&gt;<br />&lt;id&gt;commons-math&lt;/id&gt;<br />&lt;version&gt;1.0&lt;/version&gt;<br />&lt;/dependency&gt;<br />&lt;/dependencies&gt;</pre><br />单独使用id元素工作仅在groupId和artifactId匹配时，如果你浏览Maven资源库，你将看到下面的目录结构：<br />/commons-math<br />/jars<br />commons-math-1.0.jar<br />commons-math-1.1.jar<br /><br />使用id元素工作，单独的id标记已经不被赞成使用并在Maven 2中消失。当你看到别的Maven项目中使用dependencies的速记符号时，请尝试使用groupId和artifactId来标识你的依赖关系。<br /><br /><b><span style="FONT-SIZE: 16px">依赖快照</span></b><br />如果你开发的程序依赖的依赖关系经常改变，你可能想将依赖的每个依赖关系替代为最近构件的硬编码的版本。在一个项目依赖的依赖关系还处在beta的版本，或你正开发一系列项目依赖的Maven项目时时特别有用，这将在第3章论述。本实验，你将学习到如何依靠快照。<br /><br /><br /><b>我该如何做？</b><br />在你的依赖关系块儿中指定一个明确的版本，使用SNAPSHOT关键字作为版本名称的一部分。每次你执行Maven目标时，Maven将从远程资源库中检查较新的依赖关系。如果远程资源库的版本较新Maven将下载其到本地资源库。例如：下面的依赖关系将一直下载spring的新版JAR文件。<br /><pre class="overflow">&lt;dependency&gt;<br />&lt;groupId&gt;springframework&lt;/groupId&gt;<br />&lt;artifactId&gt;spring&lt;/artifactId&gt;<br />&lt;version&gt;1.2-SNAPSHOT&lt;/version&gt;<br />&lt;/dependency&gt;</pre><br /><br /><b>刚刚发生了什么？</b><br />当你使用SNAPSHOT依赖关系，你正告诉Maven使用远程资源库的最新版本。在你使用多项目插件或者当你依赖的一个完成品尚处于开发阶段这将得心应手。在你工作的团队仅有较少的开发者组成时，最好也常这么做。你将使用SNAPSHOT依赖关系当你的项目依赖一个最近的开发或者非正式版本的特别组件。SNAPSHOT依赖关系应该在开发阶段被保留，并且，概括说，你不用改发布一个依赖于SNAPSHOT依赖关系的项目。<br /><br /><b><span style="FONT-SIZE: 16px">执行脱机构建</span></b><br />如果你需要在一个离线的情况下使用Maven，你可能需要知道如何确使Maven不检查最新的SNAPSHOT依赖关系。本实验将向你展示如何用Maven执行脱机构建。<br /><br /><br /><b>我该如何做？</b><br />这个方法很简单：仅仅使用-o命令行选项。例如，如果你没有网络连接，但又想执行测试目标，运行Maven -o test。Maven将执行这个test目标而不检查依赖关系。如果你的项目没有依赖SNAPSHOT构建，你也可以断看你的环境来添加-o标志。如果你依赖SNAPSHOT构建，你将需要使用-o标志，Maven将在每次执行目标时尝试检查最新的SNAPSHOT。在这种情况下不使用-o标志本项目将不会构建成功。<br /><br /><br /><b>关于...<br />... 执行离线构建如果你不想下载任何完成品？</b><br />当然，这将不会工作。离线构建的工作，你必须已经有必需的依赖关系在你本地的资源库。项目最简单的获得Maven下载依赖<br />关系的方法是在每个Maven项目实例简单的运行“noop”目标，build:start。这个目标执行之前任何其它的目标并不执行任何动作。如果你运行build:start，Maven将从project.xml获得获取任何依赖关系。<br /><br /><br /><b><span style="FONT-SIZE: 16px">使用Maven控制台</span></b><br />如果你再三的从命令行运行Maven，你可以通过Maven控制台来节省时间。Maven控制台提供一个“外壳”，在这你可以键入目标的名称来执行Maven。通过使用Maven可以避免每次载你想运行一个Maven目标时Java Virtual Machine（JVM）启动的等待。<br /><br /><br /><b>我该如何做？</b><br />Maven Console是一个插件，你可以通过键入maven console在命令提示符。这将产生下面的输出：<br /><pre class="overflow">__ __<br />| \/ |__ _Apache__ ___<br />| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~<br />|_| |_\__,_|\_/\___|_||_| v. 1.0.2<br />The following commands are available:<br />list - list all available goals<br />help - this message<br />&lt;goalname&gt; - attain a goal<br />quit - quits the console<br />test-application 1.0 &gt;</pre><br /><br />目前，你可以在命令行执行任何你能执行的目标。开始是一下；键入 java:compile。Maven将执行 java:compile目标并返回提示符其它的目标。在一个序列中运行两个目标，你可以在提示符处输入它们，通过“空格”-例如， clean test。众所周知作为“goal chaining”这是你想通过Maven获得指定一系列目标的方法。退出Maven Console，键入quit，查看有效目标列表，键入list。<br /><br /><b>刚刚发生了什么？</b><br />在Maven Console下Maven执行java:compile目标非常之快，不信么？当你使用Maven Console时你所执行的目标是在一个现成的JVM下。当你从命令行运行Maven时，你每次运行一个目标都不得不等待JVM的启动。如果你不确信其对性能的提升，自己试试看。在命令行下运行java:complie 10次，再在Maven Console下同样运行java:compile 10次。注意时间的差别，你将发现JVM启动的时间开始增加。如果你找到你自己常用的Maven目标，Maven Console将通过启动JVM一次为来节省时间。<br /><br /><br /><b><span style="FONT-SIZE: 16px">生成Eclipse项目</span></b><br />我打赌你一定想在IDE下工作。Maven通过插件来与Eclipse,InelliJ,IDEA,JBuilder,JDeveloper以及Emacs集成。Maven很好的与全部这些工作集成，本实验关注其在Eclipse上的集成，一个开源的IDE。<br /><br /><br /><b>我该如何做？</b><br />这个过程很简单；仅仅执行eclipse插件：<br /><pre class="overflow">C:\dev\mavenbook\code\genapp\test-application&gt; maven eclipse<br />build:start:<br />eclipse:generate-project:<br />[echo] Creating C:\dev\mavenbook\code\genapp\test-application/.project ...<br />eclipse:generate-classpath:<br />[echo] Creating C:\dev\mavenbook\code\genapp\test-application/.classpath ...<br />[echo] Contains JUnit tests<br />[echo] Setting compile of src/test to target/test-classes<br />Plugin 'cactus-maven' in project 'Test Application' is not available<br />[echo] Setting default output directory to target/classes<br />eclipse:<br />[echo] Now refresh your project in Eclipse (right click on the project<br />and select "Refresh")<br />BUILD SUCCESSFUL<br />Total time: 2 seconds</pre><br /><br />Maven创建两个文件以识别Eclipse的项目：.project和.classpath。在Eclipse中，你就可以通过下面的步骤导入这个工程了：<br />1.启动Eclipse。<br />2.从菜单栏选择File→Import...&amp;#61472;<br />3.选择现存项目放入Workspace并单击Next按钮。<br />4.在Import对话框选择C:\dev\mavenbook\code\genapp\test-application目录，并单击Finish按钮。<br /><br />你稍候将执行更多步来指向Eclipse到本地Maven资源库。Eclipse使用一个名叫MAVEN_REPO来指向到本地Maven资源库。你能通过在命令行执行下面的操作设置MAVEN_REPO来使用Maven:<br />maven -Dmaven.eclipse.workspace=c:\eclipse\workspace eclipse:add-maven-repo<br />执行这个目标可以设置位于目录c:\eclipse\workspace的全局变量MAVEN_REPO。<br />作为选择，你可以按照这些步骤手工配置该变量：<br />1.从菜单栏中选择Window→打开Eclipse Preferences选择preferences。<br />2.在树型菜单左手边的Preferences对话框，选择Java→Build Path→Classpath变量。<br />3.单击New按钮来创建一个新的变量；这可以带入到新变量对话框。<br />4.输入MAVEN_REPR到Name域。<br />5.单击Folder按钮选择你本地的Maven资源库。<br />6.单击OK并重新构建你的项目。<br /><br />你可能需要配置MAVEN_REPO仅一次；该变量是全局的它可以与全部Eclipse项目共享。<br /><br /><b>关于...<br />... JBuilder, JDeveloper, and IntelliJ IDEA？</b><br />所有这些IDE有着Eclipse一样简单的插件。为JBuilder 项目生成必需的文件，运行mave jbuilder，对于JDeveloper运行mave jdeveloper，为IntelliJ IDEA项目运行mave idea。<br /><br /><br /><b><span style="FONT-SIZE: 16px">使用Maven的Eclipse插件</span></b><br />是的，这是一个你可以使用的高品质的Maven插件。它提供了许多有趣的特性，如编辑project.xml文件的能力，支持Maven自定义，Maven资源库浏览等其他功能。<br /><br /><br /><b>我该如何做？</b><br />Mevenide (http://mevenide.codehaus.org/mevenide-ui-eclipse/update/index.html) 是一个Eclipse插件其允许你使用Maven在Eclipse中工作。你能够按照如下指导从Eclipse更新站点上下载它：<br />1.启动Eclipse。<br />2.从菜单中选择Help→Software Updates→Find and Install。<br />3.在Install/Update和更新的对话框中，选择“Search for new feature to install,”并单击下一步。<br />4.在Install对话框中，单击New Remote Site。<br />5.在New Update Site对话框中，键入Mevenide在Name域，其位置在Eclipse Updates站点的URL区域。Mavenid在Eclipse Update站点中的位置是http://mevenide.codehaus.org/release/eclipse/update/site.xml。<br />6.当单词Mevenide出现在Install对话框中，选择两个子目标，Maven和Mevenide并单击Next。<br />7.直到Maven和Mevenide被下载和安装，重起Eclipse。<br /><br />首先你会注意到Mevenide标注所有project.xml文件为绿色图标。在Project Object Model编辑器中打开project.xml，右击任何project.xml文件并选择Open With...→Project Object Model编辑器。该编辑器如下图1-3所显示。<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" height="465" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_084225_qeXdeYAICm.jpg" width="605" onload="javascript:imgLoad(this);" border="0" resized="0" /><br /><br />Mevenide在Eclipse中提供了一系列tab让你编辑不同的project.xml片断。如果你学到了很多的project.xml语法，就知道Mevenide的Project Object Model编辑器提供了GUI接口来维护这个XML文件。如果你仍然希望直接编辑这个XML，你能够选择最右边的Source tab。<br />除POM编辑器之外，Mevenide也为你提供了Eclipse以外执行Maven目标的方法。要在Eclipse中执行一个Maven目标，选择Run→External Tools…→External Tools…你就能够创建一个Maven的配置并从全部有效的目标中选择你希望执行的目标。当目标在Eclipse中被执行，通过Console视图有效得显示它的输出。<br /><br />Mevenide提供的另一个有趣的功能是Repository Browser。这个工具允许你检查许多远程资源库的内容。打开Repository Browser，选择Window→Show View…→Other…，此时在Maven目录的结果对话框中选择Repository Browser。Repository Browser简单的以树型显示了资源库中的全部依赖关系（dependency），如图1-4所示，其显示了HTTPClient和abbot group的依赖关系。<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_084339_seYZQYBKUE.jpg" onload="javascript:imgLoad(this);" border="0" resized="0" /><br />图1-4.Mevenide Repository Browser view<br /><br />如果你想搜索资源库中完成品的细节，Mevenide同样提供了资源库搜索功能。这将是得心应手的因为为了某个依赖关系的细节搜索http://www.ibiblio.org/maven是非常恼人的。检查Mevenide；它将为你节省时间。<br /><br /><b>关于...<br />... NetBeans和JBuilder？</b><br />Mevenide当前的版本支持这两个IDE的表现。更多详情参见http://mevenide.codehaus.org/。<br />... IntelliJ？<br />IDEA插件维持了一些目标如同你在Eclipse中使用的目标。更多详情参见位于http://maven.apache.org/reference/plugins/idea/goals.html的IDEA插件的联机文档。<br /><br /><br /><b><span style="FONT-SIZE: 16px">生成Ant构建文件</span></b><br />当你想用Apache的Ant构建的某些时候。可能你的项目使用自动化处理正依赖于Ant，又可能你有一些团队成员没有完成到Maven的转换并且他们希望继续使用Ant。目前为止许多IDE提供通过Ant构建项目文件，你能够使用Maven生成build.xml文件这样你的项目就能够被Apache的Ant所构建。<br /><br /><br /><b>我该如何做？</b><br />运行Ant插件。运行maven ant将创建build.xml文件其包含到聚合的依赖关系的目标，build和test你的应用程序。看看运行默认的jar目标的输出：<br /><pre class="overflow">C:\dev\mavenbook\code\genapp\test-application&gt;ant<br />Buildfile: build.xml<br />init:<br />[mkdir] Created dir: C:\dev\mavenbook\code\genapp\target\lib<br />get-deps:<br />[get] Getting: http://www.ibiblio.org/maven/springframework/jars/<br />spring-core-1.1.4.jar<br />[get] Getting: http://www.ibiblio.org/maven/springframework/jars/<br />spring-web-1.1.4.jar<br />compile:<br />[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\target\classes<br />junit-present:<br />[echo] = = = = = = ============ WARNING = = = == = = = = = = = = = = = = = = = = = = =<br />[echo] Junit isn't present in your ${ANT_HOME}/lib directory. Tests not<br />executed.<br />[echo] = = ==============================================<br />compile-tests:<br />internal-test:<br />test:<br />jar:<br />[jar] Building jar: C:\dev\mavenbook\code\genapp\test-application\<br />target\test-application-1.0.jar<br />BUILD SUCCESSFUL<br />Total time: 2 seconds</pre><br /><br />你可能注意到这里存在一个问题，这是个说明性的问题。Apache Ant没有自动管理依赖关系用于可选的Ant任务。如果你向运行JUnit单元测试，你就需要从本地Maven资源库拷贝junit-3.8.1.jar到${ANT_HOME}/lib下。这个构建文件包含了一个get-deps的目标其从位于http://www.ibiblio.org/maven的远程Maven资源库为所有的项目依赖关系执行Ant获得任务到gran。<br /><br /><b>关于...<br />... 试图离开Ant?Maven是Ant的替代者么？</b><br />是或不是。Ant并不“差”，并且多数工具仍然同Ant工作。没有理由不提供与Apache Ant的交互，一旦你学到更多关于第2章的Jelly，你将发现Ant工作在Maven里应用的更广泛。许多项目使用持续集成的系统如其期望的Ant构建文件。运行maven ant provides很容易找到继续支持这些工具。<br /><br /><br /><b><span style="FONT-SIZE: 16px">移植一个Ant项目到Maven</span></b><br />一定数量的项目使用Ant作为构建系统，你可能打算移植到Maven上来。<br /><br /><br /><b>我该如何做？</b><br />从头开始。创建一个默认的Maven模版，并且移动你的代码到适当的位置。不要设法使Maven适合你项目的目录和构建位置。Maven强过一个构建工具；它是一个标准方式考虑到项目的布局和管理。如果你试图使Maven适应你项目的想法来构建，你将结束使用Maven。如果你的项目由一个复杂的buil.xml文件组成其产生许多不同的交付结果，你将需要“组件化”你的项目请跟随第3章的多项目描述。你可能要开始移动你项目的目录结构转向标准的Maven项目目录结构。换而言之，不要试图生搬硬套你的项目到Maven。<br />如果你对迁移到Ant感兴趣，但你没有时间停止开发，你可以使用Maven调用你现存的Ant目标。如果你这么做，你将错失使用Maven的大部分益处，但仅仅是可能。更多信息参见位于http://maven.apache.org/using/migrating.html的“Migrating from Ant”。<br /><br /><b>关于...<br />... 灵活性和选择？</b><br />灵活性和选择是个比较老的问题了。我们保证Maven将改变你构建和维护项目的方式方法，重要的是应该有意的使用Maven。Ant和Maven间的差别是什么呢？Ant提供块构建的可重用任务如copy,move,delete和junit，Maven提供了可重用的任务构建。Maven是一个“构建容器”，其允许你在一系列项目上重用任务构建。以单元测试为例，使用Ant，你将通过在你项目的build.xml文件里包含下面来执行JUnit测试。<br /><pre class="overflow">&lt;junit printsummary="yes" haltonfailure="yes"&gt;<br />&lt;classpath&gt;<br />&lt;pathelement location="${build.tests}"/&gt;<br />&lt;pathelement path="${java.class.path}"/&gt;<br />&lt;/classpath&gt;<br />&lt;formatter type="plain"/&gt;<br />&lt;test name="my.test.TestCase" haltonfailure="no" outfile="result"&gt;<br />&lt;formatter type="xml"/&gt;<br />&lt;/test&gt;<br />&lt;batchtest fork="yes" todir="${reports.tests}"&gt;<br />&lt;fileset dir="${src.tests}"&gt;<br />&lt;include name="**/*Test*.java"/&gt;<br />&lt;exclude name="**/AllTests.java"/&gt;<br />&lt;/fileset&gt;<br />&lt;/batchtest&gt;<br />&lt;/junit&gt;</pre><br />该片断省略的不同路经和变量的定义如build.tests和java.class.path，同时也省略的Ant目标的定义。另外一些单元测试类，你也需要定义一个标以目标在源文件和单元测试中，并且一个目标对应创建一个目录。每个项目需要定义同样的逻辑以执行单元测试。最后，大多数的Ant项目使用了相似的目录结构，并且构建逻辑重用是通过拷贝和粘贴到build.xml文件。时间推移，项目将变的更复杂和用户化，目录标准增加并且每个项目趋于不同的编译、测试方法和包；久而久之，build.xml变成项目中的一部分了。你定制的Ant构建文件越大，越多的(entropy creeps)会进入到你的构建工作。Ant作为一个构建工具的能力要少于其作为语言提供构特性的API。1.6的Ant，含有了Ant库和宏。在完成全局可重用的表现上与Maven相比Ant还有一段很长的路要走。<br /><br />利用Maven的Test插件为所有项目定义通用逻辑其需要编译和执行单元测试。单元测试插件为编译和执行单元测试获得了最好的实践，并且它为所有项目达成了最有效的实践。当你运行maven test，Maven从POM传递信息到Test插件，Test插件则依赖于Java插件来执行编译。在Maven中没有一处你明确的告诉构建容器如何执行JUnit单元测试。如果你这么做了，在Ant中你将会面对同样的问题。正如你不用告诉你的Servlet容器如何解压WAR文件一样，你不用告诉Maven如何构建你的项目。Maven是一个构建容器。许多人最初被Maven吸引是因为它提供了依赖关系管理，但Maven最大的好处是它提供了标准的开发结构来访问多个项目。依赖关系管理仅仅是标准开发结构的一个简单的副产品。<br /><br /><center><span style="COLOR: red">提示</span></center><br /><center>Maven提供了开发结构，统一了项目布局，在最后你可<br />以尝试让Maven照管许多构建任务的细节。与其花费你<br />重要的时间来写构建脚本，不如使用Maven插件来把焦<br />点放到编写你应用程序上来。</center><br /><br />下面的章节将向你展示如何调整和定制Maven，但你需要确定你并不要求Maven成为另一个Ant。很有可能你有一个巨大的重建于Ant的build.xml文件充满了Jelly脚本（见第2章）并且的Maven项目和一个大的maven.xml文件。但如果这么做你则失去了所有Maven的指向。如果你发想自己包含了很多构建相关的逻辑在你的Maven构建，你需要慎重考虑使用Maven。高定制化的Maven构建是矛盾的；你的Maven项目应该对现存插件起到杠杆作用。例如，如果你的项目需要编译Jave源文件，创建JAR文件，使用Jave插件和JAR插件。如果你忽略重用Maven插件使用Maven的Ant集成则是重复制造轮子，你最好不要使用Maven。不要滥用Maven；合理使用Maven，省省你的火气。<br /><br /><b><span style="FONT-SIZE: 16px">生成项目文档</span></b><br />如果你正开发Java应用程序或者库，你可能想生成JavaDoc。<br /><br /><b>我该如何做？</b><br />简单的执行javadoc目标，Maven将生成项目的文档。下面是执行javadoc目标的输出：<br /><pre class="overflow">C:\dev\mavenbook\code\genapp\test-application&gt;maven javadoc<br />__ __<br />| \/ |__ _Apache__ ___<br />| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~<br />|_| |_\__,_|\_/\___|_||_| v. 1.0.2<br />build:start:<br />xdoc:init:<br />maven-javadoc-plugin:report:<br />[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\<br />target\javadoc\src<br />[javadoc] Generating Javadoc<br />[javadoc] Javadoc execution<br />[javadoc] Loading source files for package mdn.testapp...<br />[javadoc] Constructing Javadoc information...<br />[javadoc] Standard Doclet version 1.5.0_01<br />[javadoc] Building tree for all the packages and classes...<br />[javadoc] Generating C:\dev\mavenbook\code\genapp\test-application\<br />target\docs\apidocs\constant-values.html...<br />[javadoc] Copying file C:\Documents and Settings\tobrien\.maven\cache\<br />maven-javadoc-plugin-1.7\plugin-resources\stylesheet.css to file C:\dev\<br />mavenbook\code\genapp\test-application\target\docs\apidocs\stylesheet.css...<br />[javadoc] Building index for all the packages and classes...<br />[javadoc] Building index for all classes...<br />[delete] Deleting directory C:\dev\mavenbook\code\genapp\testapplication\<br />target\javadoc\src<br />BUILD SUCCESSFUL<br />Total time: 7 seconds<br />Once this goal has been executed, JavaDoc is available in testapplication/<br />target/javadoc/src.</pre><br /><br /><b>刚刚发生了什么？</b><br />再次，Maven作了全部繁重的工作。你想要JaveDoc，你告诉Maven生成JaveDoc，故事结束。注意你不用告诉Maven任何你项目的情况；它“知道”如何做，Maven这很多这样的事都是直截了当的；在你告诉Maven有关你的项目后你就不用做什么了。Maven操作细节。<br /><br /><br /><br /><b><span style="FONT-SIZE: 16px">介绍Maven给你的团队</span></b><br />Maven是一个伟大的协作工具，你能够使用它生成开发者活动报告，项目捐赠者和邮件列表。<br /><br /><br /><b>我该如何做？</b><br />许多项目有一个邮件列表其被用于讨论架构和实现。并且，通过透视图，如Tomcat，Maven和Ant等项目，并不仅仅是一个开发者社区来共享捐赠到同样的邮件列表。邮件列表不仅用于开源项目；许多组织开始使用同样的协作模型用于开启，发布开发。因为邮件列表是协作的关键部分，Maven提供了在一个项目的project.xml中指定邮件列表的途径。下面引用project.xml添加邮件列表的元素：<br /><pre class="overflow">&lt;mailingLists&gt;<br />&lt;mailingList&gt;<br />&lt;name&gt;Maven User List&lt;/name&gt;<br />&lt;subscribe&gt;users-subscribe@maven.apache.org&lt;/subscribe&gt;<br />&lt;unsubscribe&gt;users-unsubscribe@maven.apache.org&lt;/unsubscribe&gt;<br />&lt;archive&gt;http://marc.theaimsgroup.com/?l=turbine-maven-user&lt;/archive&gt;<br />&lt;/mailingList&gt;<br />&lt;mailingList&gt;<br />&lt;name&gt;Maven Developer List&lt;/name&gt;<br />&lt;subscribe&gt;dev-subscribe@maven.apache.org&lt;/subscribe&gt;<br />&lt;unsubscribe&gt;dev-unsubscribe@maven.apache.org&lt;/unsubscribe&gt;<br />&lt;archive&gt;http://marc.theaimsgroup.com/?l=turbine-maven-dev&lt;/archive&gt;<br />&lt;/mailingList&gt;<br />&lt;/mailingLists&gt;</pre><br /><br />有两种类型的团队成员位于Maven项目中：捐赠者和开发者。这种定义可能改变你的项目，捐赠者通常被认为是开源社区中捐赠过补丁或文档者，开发者是一个项目的核心成员。在ASF，提交者和捐献者可以一同捐献一个项目，但捐献者既不写资源库代码又不提交大的项目决定。下面引用了project.xml添加contributor和developer元素到project.xml文件：<br /><pre class="overflow">&lt;developers&gt;<br />&lt;developer&gt;<br />&lt;name&gt;Vincent Massol&lt;/name&gt;<br />&lt;id&gt;vmassol&lt;/id&gt;<br />&lt;email&gt;vmassol@apache.org&lt;/email&gt;<br />&lt;organization&gt;Apache Software Foundation&lt;/organization&gt;<br />&lt;roles&gt;<br />&lt;role&gt;Author&lt;/role&gt;<br />&lt;role&gt;Developer&lt;/role&gt;<br />&lt;/roles&gt;<br />&lt;url&gt;http://www.massol.net&lt;/url&gt;<br />&lt;timezone&gt;+1&lt;/timezone&gt;<br />&lt;/developer&gt;<br />&lt;/developers&gt;<br />&lt;contributors&gt;<br />&lt;contributor&gt;<br />&lt;name&gt;Tim OBrien&lt;/name&gt;<br />&lt;email&gt;tobrien@apache.org&lt;/email&gt;<br />&lt;organization&gt;Apache Software Foundation&lt;/organization&gt;<br />&lt;roles&gt;<br />&lt;role&gt;Author&lt;/role&gt;<br />&lt;role&gt;Developer&lt;/role&gt;<br />&lt;/roles&gt;<br />&lt;url&gt;http://www.oreillynet.com/pub/au/1738&lt;/url&gt;<br />&lt;timezone&gt;-6&lt;/timezone&gt;<br />&lt;/contributor&gt;<br />&lt;/contributors&gt;</pre><br /><br /><b>刚刚发生了什么？</b><br />你告诉Maven谁在这个项目工作，对于今后你生成项目的web站点很有用。开发者和捐赠者的信息在POM中以列表的通过站点生成插件，很多插件为资源控制生成报告。跟资源控制对话...。<br /><br /><br /><b><span style="FONT-SIZE: 16px">向Maven到资源控制</span></b><br />你使用资源控制么？把它告诉给Maven，在本书的下面你将能够生成一些有兴趣的描述报告。一旦你关联了源代码资源库到你的项目，你将能够是用Maven的Source Control Management(SCM)插件，其提供了许多目标（goal）用于从诸如CVS和其子版本的版本控制系统更新和发布。<br /><br /><br /><b>我该如何做？</b><br />你需要添加一个respository元素到你项目的project.xml文件。下面的respository元素来自于Apache Struts项目，并且它指向到位于有效的子版本资源库http://svn.apache.org/repos/asf/struts/core/trunk：<br /><pre class="overflow">&lt;repository&gt;<br />&lt;connection&gt;<br />scm:svn:http://svn.apache.org/repos/asf/struts/core/trunk<br />&lt;/connection&gt;<br />&lt;developerConnection&gt;<br />scm:svn:https://svn.apache.org/repos/asf/struts/core/trunk<br />&lt;/developerConnection&gt;<br />&lt;url&gt;http://svn.apache.org/repos/asf/struts/core/trunk&lt;/url&gt;<br />&lt;/repository&gt;</pre><br />connection元素告诉Maven有关SCM只读的位置。scm标识该URL起始于SCM位置，svn告诉Maven该URL将是资源库的子项目，并且最终的片断定位于项目的trunk。你可能也指定了developerConnection，你使用该元素在你需要分隔观众人群的不可写访问和一般人群的可写访问源代码。url元素提供了能够被浏览的资源库的URL。在Struts的案例中，他们选择了指向资源库到它自己，它能够被一个正常的浏览器所浏览。Struts团队也可以指向到ViewCVS实例配置指向到ASF的资源库的子版本，它能够在http://cvs.apache.org/viewcvs.cgi/struts/core/trunk/?root=Apache-SVN的位置找到。<br /><br />当你在一个详细的资源控制系统指定了project.xml，你也可以指向到一个详细项目的不同版本和分之。下面的XML展示了简化版的Apache Struts项目的version和branche元素。<br /><pre class="overflow">&lt;versions&gt;<br />&lt;version&gt;<br />&lt;id&gt;1.2.0&lt;/id&gt;<br />&lt;name&gt;1.2.0&lt;/name&gt;<br />&lt;tag&gt;STRUTS_1_2_0&lt;/tag&gt;<br />&lt;/version&gt;<br />&lt;version&gt;<br />&lt;id&gt;1.2.6&lt;/id&gt;<br />&lt;name&gt;1.2.6&lt;/name&gt;<br />&lt;tag&gt;STRUTS_1_2_6&lt;/tag&gt;<br />&lt;/version&gt;<br />&lt;/versions&gt;<br />&lt;branches&gt;<br />&lt;branch&gt;<br />&lt;tag&gt;STRUTS_1_1_BRANCH&lt;/tag&gt;<br />&lt;/branch&gt;<br />&lt;branch&gt;<br />&lt;tag&gt;STRUTS_1_2_BRANCH&lt;/tag&gt;<br />&lt;/branch&gt;<br />&lt;/branches&gt;</pre><br />Version被用于几个插件，如Announcements插件，其用于为每个版本创建发布纪录。<br /><br /><b>关于...<br />... CVS？</b><br />如果你的项目使用CVS，在Jakatta Catus项目中你将需要添加一个如repository元素的资源库元素如下所示：<br /><pre class="overflow">&lt;repository&gt;<br />&lt;connection&gt;<br />scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-cactus<br />&lt;/connection&gt;<br />&lt;url&gt;http://cvs.apache.org/viewcvs.cgi/jakarta-cactus/&lt;/url&gt;<br />&lt;/repository&gt;</pre><br />在使用CVS paserver如果你暴露你的资源库上面的引用是合适的。如果你在SSH之上访问CVS，你就需要按照下面的语法设置你的CVS_RSH环境变量。<br /><pre class="overflow">&lt;repository&gt;<br />&lt;connection&gt;<br />scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-cactus<br />&lt;/connection&gt;<br />&lt;url&gt;http://cvs.apache.org/viewcvs.cgi/jakarta-cactus/&lt;/url&gt;<br />&lt;developerConnection&gt;<br />scm:cvs:ext:tobrien@somehost:/home/cvs/repository:modulename<br />&lt;/developerConnection&gt;<br />&lt;/repository&gt;</pre><br /><br /><b><span style="FONT-SIZE: 16px">创建项目Web站点</span></b><br />Maven能够创建项目web页，包含项目的有关信息。<br /><br /><br /><b>我该如何做？</b><br />创建一个Maven项目web站点，使用Site插件运行下面的Maven目标：<br />C:\dev\mavenbook\code\genapp\test-application&gt; maven site<br />运行Site插件将在test-application/target/docs/index.html目录创建默认的项目站点。如果你加载这个HTML，你将发现这个站点与众不同的Maven感观。图1-5展示了一个轻量的定制web站点，包含定制的组织logo和项目logo。作为替换向你展示了人工的web站点，你能够看出这个站点的项目当前正使用Maven的构建系统-Jaxen。<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" height="481" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_084943_mEbktHghCr.jpg" width="588" onload="javascript:imgLoad(this);" border="0" resized="0" /><br />图1-5.简单的Maven项目站点。<br /><br />许多Maven站点有一个项目导航部分用于提供链接系统向所有的Maven项目。项目信息包含项目的有关信息，项目的邮件列表，项目的资源控制及问题跟踪（你将在第4章找到所有的这些）。通过在xdocs目录里创建和修改XML标记生成Maven web站点的目录。在图5，项目包含5个项目细节文档：Overview,FAQ,Releases,CVS Access和Status。这些文档因为被包括在xdocs/navigation.xml文件中所以他们被包含在左边的导航栏。xdocs目录是Maven存放XML XDoc格式的项目细节文档的地方。下面是Jaxen的navigation.xml文档的内容：<br /><pre class="overflow">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;project name="jaxen" repository="jaxen" href="http://jaxen.org"&gt;<br />&lt;title&gt;jaxen: universal java xpath engine&lt;/title&gt;<br />&lt;body&gt;<br />&lt;links&gt;<br />&lt;item name="The Werken Company" href="http://www.werken.com/"/&gt;<br />&lt;/links&gt;<br />&lt;menu name="jaxen"&gt;<br />&lt;item name="Overview" href="/index.html"/&gt;<br />&lt;item name="FAQ" href="/faq.html"/&gt;<br />&lt;item name="Releases" href="/releases.html"/&gt;<br />&lt;item name="CVS Access" href="/cvs-usage.html"/&gt;<br />&lt;item name="Status" href="/status.html"/&gt;<br />&lt;/menu&gt;<br />&lt;/body&gt;<br />&lt;/project&gt;</pre><br />link元素放置一个链接http://www.werken.com到页面的右手边，项目的logo之下，menu元素包含了用以显示的左右边的导航区域。菜单中的一个文件是xdocs/index.xml。下面是Jaxen的xdocs/index.xml文件的简短目录：<br /><pre class="overflow">&lt;?xml version="1.0"?&gt;<br />&lt;document url="http://jaxen.org/index.xml"&gt;<br />&lt;properties&gt;<br />&lt;author email="bob@eng.werken.com"&gt;bob mcwhirter&lt;/author&gt;<br />&lt;title&gt;jaxen&lt;/title&gt;<br />&lt;/properties&gt;<br />&lt;body&gt;<br />&lt;section name="News"&gt;<br />&lt;p&gt;<br />Added the slidedeck from my<br />&lt;a href="/pdf/intro-slides.pdf"&gt;SD-West presentation&lt;/a&gt;.<br />&lt;/p&gt;<br />&lt;p&gt;<br />Check out these<br />&lt;a href="http://dom4j.org/benchmarks/xpath/index.html"&gt;Performance<br />Benchmarks&lt;/a&gt; comparing dom4j and Jaxen against Xerces and Xalan.<br />&lt;/p&gt;<br />&lt;/section&gt;<br />[...]<br />&lt;/document&gt;</pre><br />一旦你生成了你的项目站点，加载target/docs/index.html到一个浏览器来查看你项目的web站点。<br /><br /><b>关于...<br />... 这些文件的语法？</b><br />你能在Maven XDoc插件的FAQ（http://maven.apache.org/reference/plugins/xdoc/faq.html）找到navigation.xml文件的更多相关语法和格式信息。并且你也能在Maven XDoc Plug-in page（http://maven.apache.org/reference/plugins/xdoc/index.html）上找到更多有关individual pages格式的信息。这个插件也面也包含更多定制站点生成插件的输出和行为的说明。<br />看第4章有关多样化报告的更深的分析，这样你句能够把项目活动和结构搞清楚了。<br /><br /><br /><b><span style="FONT-SIZE: 16px">定制站点报告</span></b><br />站点生成创建了许多有用的报告，但依照你的风格，你可能想取出其中的某些报告。<br /><br /><br /><b>我该如何做？</b><br />修改project.xml中的reports元素内容来改变Maven站点生成对报告的生成。下面是reports元素中的几个有效的报告活动：<br /><br /><pre class="overflow">&lt;reports&gt;<br />&lt;report&gt;maven-changelog-plugin&lt;/report&gt;<br />&lt;report&gt;maven-changes-plugin&lt;/report&gt;<br />&lt;report&gt;maven-checkstyle-plugin&lt;/report&gt;<br />&lt;report&gt;maven-clover-plugin&lt;/report&gt;<br />&lt;report&gt;maven-cruisecontrol-plugin&lt;/report&gt;<br />&lt;report&gt;maven-developer-activity-plugin&lt;/report&gt;<br />&lt;report&gt;maven-faq-plugin&lt;/report&gt;<br />&lt;report&gt;maven-file-activity-plugin&lt;/report&gt;<br />&lt;report&gt;maven-license-plugin&lt;/report&gt;<br />&lt;report&gt;maven-linkcheck-plugin&lt;/report&gt;<br />Customizing Site Reports 37<br />&lt;report&gt;maven-javadoc-plugin&lt;/report&gt;<br />&lt;report&gt;maven-jdepend-plugin&lt;/report&gt;<br />&lt;report&gt;maven-jira-plugin&lt;/report&gt;<br />&lt;report&gt;maven-junit-report-plugin&lt;/report&gt;<br />&lt;report&gt;maven-jxr-plugin&lt;/report&gt;<br />&lt;report&gt;maven-pmd-plugin&lt;/report&gt;<br />&lt;report&gt;maven-simian-plugin&lt;/report&gt;<br />&lt;report&gt;maven-tasklist-plugin&lt;/report&gt;<br />&lt;/reports&gt;</pre><br /><br />从Maven的站点生成中排除一个报告，仅需要移除reports元素中的report的插件元素。Maven项目并未指定reports元素生成一套默认的报告：jdepend，Checkstyle，changes，changelog，developer-activity，file-activity，license，javadoc，jxr，junit，linkcheck和tacklist。当你添加一个reports元素到你项目的project.xml文件，你必须列出所有你希望获得的报告。<br /><br /><b>刚刚发生了什么？</b><br />reports元素列出了所有这些多样的reports，但你可能想了解报告提供的全部这些。表1-1提供了报告的一些摘要描述。<br /><img style="DISPLAY: inline; WIDTH: 576px; HEIGHT: 550px" onclick="javascript:imgClick(this);" height="450" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_26_085231_mhQyPlsiyk.jpg" width="328" onload="javascript:imgLoad(this);" border="0" resized="1" /><br /><br />更多全面的插件和报告列表，参见：<br />Maven插件: http://maven.apache.org/reference/plugins/index.html<br />Maven插件沙箱: http://maven.apache.org/plugins-sandbox/index.html<br />Maven 在SourceForge上的插件: http://maven-plugins.sourceforge.net/<br />第三方Maven插件: http://maven.apache.org/reference/3rdparty.html<br /><br /><br /></div>
<img src ="http://www.blogjava.net/i369/aggbug/86037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-12-07 11:25 <a href="http://www.blogjava.net/i369/articles/86037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 如何使用 SubVersion </title><link>http://www.blogjava.net/i369/articles/84432.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 29 Nov 2006 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84432.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84432.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84432.html</trackback:ping><description><![CDATA[
		<div class="postText">SubVersion 是一个近期才开始流行起来的版本控制系统。而其作者也就是CVS系统的主要作者本人。最早在 PHP &amp; More vol.4 上看到简介文章，没怎么入心，近来因为需要，自己尝试配置了一个轻量服务器型的。虽然剑走偏锋，还是把经验心得拿出来与大家分享一下。<br />如果大家有条件，可以多看看 PHP &amp; More vol.4 上的简介文章，毕竟上面说大部分需求都是与 Apache 相结合应用，而且说明也比我详细得多。或者英语好的朋友可以自己去查询帮助手册，直接找到最合适最直接的答案。整套系统共分为：<br />SubVersion，从 <a href="http://subversion.tigris.org/" target="_blank"><font color="#000080">http://subversion.tigris.org/</font></a> 下载，是实现服务系统的软件。<br />TortoiseSVN，从 <a href="http://tortoisesvn.tigris.org/" target="_blank"><font color="#000080">http://tortoisesvn.tigris.org/</font></a> 下载，是很不错的 SVN 工作程序，结合到文件管理器中，用起来很方便。<br />SVNService.exe，从 <a href="http://dark.clansoft.dk/~mbn/svnservice/" target="_blank"><font color="#000080">http://dark.clansoft.dk/~mbn/svnservice/</font></a> 下载，是专为 SubVersion 开发的一个用来作为 Win32 服务挂接的入口程序。<br />安装好 SubVersion，然后使用 svnadmin create 创建工作区域，比如 svnadmin create d:\subversion\proj1。尝试使用文件管理器去查看 proj1 这个目录，里面密密麻麻配好了版本控制需要的数据库结构。<br />然后如简介文章中所言，通过 svnserve -d -r d:\subversion 就可以创建以 d:\subversion 为工作根目录的 svn 服务器实例。不过这个实例如 tomcat 一般，是必须通过命令行窗口挂着的。<br />然后我尝试了一下使用微软提供的 sc.exe 来将 svnserve.exe 升为服务，结果发现无法通过这种方式来挂成服务。只好转回头去老老实实的使用 SVNService.exe 。达到同样效果的 SVNService.exe 命令是 SVNService -install -d -r d:\subversion。最后在服务管理中将 SVNService 更改为自动启动。<br />到这个时候，一个可以正常使用的轻型 svn 服务器就已经搭建成功了。通过 svn 程序可以实现大部分需求，如果觉得麻烦，使用 TortoiseSVN 在 GUI 界面下操作也可以完成同样的需求。<br />但是到目前为止，这个 svn 服务器尚无任何权限机制。打开 d:\subversion\proj1\conf\svnserve.conf 文件。将其中 #  开始的行前注释去掉，形成如下有效结构：<br />[general]<br />anon-access = none<br />auth-access = write<br />password-db = PASSWD<br />realm = Input your password ^_^<br />保存 svnserve.conf ，那么一个非验证用户无权访问，验证用户有读写权限的 svn 服务器就基本成型了。而最后剩下的一个步骤，就是在 conf 这个目录下创建一个合适的 PASSWD 密码管理文件了。<br />这个地方我自己的体会是简介文章上说的是错的…我尝试过使用 htpasswd.exe 来创建密码表，结果 svn 服务器告诉我它不认识这玩意-_-!。我将 PASSWD 文件内容改为诸如：<br />[users]<br />snakevil = 123<br />root = 234<br />这样的结构，就可以正常登陆了。<br />呵、到此为止，所有准备工作完毕^_^将开发项目的内容 svn import 进去，然后开工吧！<br /><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=470107</p><br /></div>
<img src ="http://www.blogjava.net/i369/aggbug/84432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-29 22:29 <a href="http://www.blogjava.net/i369/articles/84432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion学习笔记 </title><link>http://www.blogjava.net/i369/articles/84430.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 29 Nov 2006 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84430.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84430.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84430.html</trackback:ping><description><![CDATA[
		<p>一、Subversion服务器搭建</p>
		<p>1、下载安装最新的windows版的<a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91">Subversion</a>服务器端安装文件：<a href="http://subversion.tigris.org/files/documents/15/29065/svn-1.3.0-setup.exe">svn-1.3.0-setup.exe</a>，我安装在C:\svn</p>
		<p>2、创建项目数据仓库：命令行下执行：E:\&gt;svnadmin create e:/svntest/repository</p>
		<p>3、导入项目文件：命令行下执行：E:\&gt;svn import e:\tmp\project file:///e:/svntest/repository -m "initial import"</p>
		<p>4、基本操作导出：E:\&gt;svn checkout file:///e:/svntest/repository/trunk WorkDir</p>
		<p>5、启动SVN服务（缺省端口：3690）：svnserver -d -r e:\svntest\repository 现在可以通过svn://localhost/来访问我们的测试项目了。</p>
		<p>6、简单配置：conf\svnserve.conf 和conf\passwd需要修改，以增加相应的用户验证id和密码，其中realm的值将作为客户端程序登陆输入用户名密码时看到提示信息。注意：一定要将每一非注释行顶格，否则用svn访问时会出错。</p>
		<p dir="ltr" style="MARGIN-RIGHT: 0px">7、关于SVN协议用户密码验证：</p>
		<ul>
				<li dir="ltr" style="MARGIN-RIGHT: 0px">密码缓存，保存在auth目录内，类似于下面的地址，系统不同稍有变化<br /> C:\Documents and Settings\bruce\Application Data\Subversion\auth 
</li>
				<li dir="ltr" style="MARGIN-RIGHT: 0px">用户配置保存在<br /> C:\Documents and Settings\bruce\Application Data\Subversion\config 
</li>
				<li dir="ltr" style="MARGIN-RIGHT: 0px">配置文件格式说明：<br /> C:\Documents and Settings\bruce\Application Data\Subversion\README.txt 
</li>
				<li dir="ltr" style="MARGIN-RIGHT: 0px">说明文档提到svn密码验证是通过MD5加密传递 </li>
		</ul>
		<p dir="ltr" style="MARGIN-RIGHT: 0px">二、客户端安装</p>
		<p>1、下载安装<a href="http://tortoisesvn.tigris.org/download.html">TortoisSVN</a>安装文件：<a href="http://keihanna.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.3.2.5840-svn-1.3.0.msi">TortoiseSVN-1.3.2.5840-svn-1.3.0.msi</a> ，在Win2k的虚拟机上安装的时候还提示我安装新版本的WindowsInstaller，下了一个3.1版的装上后就可以装TortoiseSVN了。可以下载中文语言包：（<a href="http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/LanguagePack_1.3.2_zh_CN.exe">http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/LanguagePack_1.3.2_zh_CN.exe</a>），安装语言包后，在TortoiseSVN的设置菜单里面可以选择中文界面。</p>
		<p>2、基本操作：资源管理器内，删除上面命令行下导出的e:\tmp\WorkDir，用TortoiseSVN来导出.</p>
		<p>新建一个目录WorkDir，在该目录上右键选择SVN checkout，Url填：file:///e:/svntest/repository 也可以试试svn://localhost/</p>
		<p>3、访问开源subversion项目。测试项目：<font face="Courier New"><a href="https://svn.sourceforge.net/svnroot/svntest3">https://svn.sourceforge.net/svnroot/svntest3</a> ，提示：TotoiseSVN可以设置代理服务器。</font></p>
		<p align="right">
				<font size="5">by <a title="" href="http://blog.csdn.net/islq">islq</a> 2006-3-20</font>
		</p>
		<p>参考资料：</p>
		<p>
				<a href="http://linux.chinaunix.net/news/info/2005-01-10/726.shtml">
						<font size="1">SUBVERSION系统学习笔记</font>
				</a>
		</p>
		<p>
				<a href="http://www.subversion.org.cn/svnbook/1.1/svn-book.pdf">
						<font size="2">svn-book.pdf</font>
				</a>
		</p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=630553</p>
<img src ="http://www.blogjava.net/i369/aggbug/84430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-29 22:27 <a href="http://www.blogjava.net/i369/articles/84430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN安装和使用(新一代的CVS) </title><link>http://www.blogjava.net/i369/articles/84431.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 29 Nov 2006 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84431.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84431.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84431.html</trackback:ping><description><![CDATA[
		<h3>SVN安装和使用</h3>
		<h4>SVN的安装</h4>访问<a class="external" href="http://subversion.tigris.org/"><font color="#000080">SVN网站</font></a><font color="#000080"><img class="outlink" alt="" src="http://202.195.160.145/JSPWiki/images/out.png" /></font>下载你所需版本的安装包。以Linux为例，安装过程为依次执行以下步骤：<pre>rpm -ivh apr-0.9.5-0.2.i386.rpmrpm -ivh apr-util-0.9.5-0.1.i386.rpmrpm -ivh neon-0.24.7-1.i386.rpmrpm -ivh subversion-1.1.1-1.rh80.i386.rpm</pre><p> </p><h4>SVN安装包的基本命令</h4><p></p><table class="wikitable" border="1"><tbody><tr><td>svn</td><td>The command-line client program.</td></tr><tr><td>svnversion</td><td>A program for reporting the state (in terms of revisions of the items present) of a working copy.</td></tr><tr><td>svnlook</td><td>A tool for inspecting a Subversion repository.</td></tr><tr><td>svnadmin</td><td>A tool for creating, tweaking or repairing a Subversion repository.</td></tr><tr><td>svndumpfilter</td><td>A program for filtering Subversion repository dumpfile format streams.</td></tr><tr><td>mod_dav_svn</td><td>A plug-in module for the Apache HTTP Server, used to make your repository available to others over a network.</td></tr><tr><td>svnserve</td><td>A custom standalone server program, runnable as a daemon process or invokable by SSH; another way to make your repository available to others over a network.</td></tr></tbody></table><p> </p><h4>配置本地访问的SVN</h4>执行svn --version，你将看到如下画面<pre>[root@localhost local]# svn --version* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.* ra_local : Module for accessing a repository on local disk.* ra_svn : Module for accessing a repository using the svn network protocol.</pre>如果你有ra_local这个模块，那么客户端就可以用file:// URLs的地址来访问。 
<p>执行一下命令 </p><pre>$ svnadmin create /root/svnrepo$ ls /root/svnrepoconf/ dav/ db/ format hooks/ locks/ README.txt</pre><p>接下来，我们建立一个本地工作目录/root/svnlocal，进入执行 </p><pre>//建立项目[root@localhost svnlocal]# mkdir project [root@localhost svnlocal]# mkdir project/trunk[root@localhost svnlocal]# mkdir project/branches[root@localhost svnlocal]# mkdir project/tags//建立一个模块exo[root@localhost svnlocal]# mkdir project/exo[root@localhost svnlocal]# vi project/exo/exo.conf[root@localhost svnlocal]# svn import . file:///root/svnrepo -m 'initial'[root@localhost svnlocal]# rm -rf project[root@localhost svnlocal]# svn checkout file://localhost/root/svnrepo/project //check整个项目[root@localhost svnlocal]# svn checkout file://localhost/root/svnrepo/project exo //check 其中一个模块</pre>如果成功可以看到文件已经被check出来。地址可以使用file://localhost/root/svnrepo 或者使用file:///root/svnrepo 
<p>其他的命令有 </p><ul><li>Enter your working copy and edit a file's contents. 
</li><li>Run svn diff to see unified diff output of your changes. 
</li><li>Run svn commit to commit the new version of your file to the repository. 
</li><li>Run svn update to bring your working copy “up-to-date” with the repository. </li></ul><p> </p><h4>SVN的访问地址</h4><table class="wikitable" border="1"><tbody><tr><th>Schema </th><th>Access Method</th></tr><tr><td>file:/// </td><td>direct repository access (on local disk)</td></tr><tr><td>http:// </td><td>access via WebDAV protocol to Subversion-aware Apache server</td></tr><tr><td>https:// </td><td>same as http://, but with SSL encryption.</td></tr><tr><td>svn:// </td><td>access via custom protocol to an svnserve server</td></tr><tr><td>svn+ssh:// </td><td>same as svn://, but through an SSH tunnel.</td></tr></tbody></table><p> </p><h4>启动SVN的svnserve，这样你就可以通过svn://url的方式来访问。</h4>查看启动参数<pre>[root@localhost svnlocal]# svnserve --helpUsage: svnserve [options]Valid options:  -d [--daemon]            : daemon mode  --listen-port arg        : listen port (for daemon mode)  --listen-host arg        : listen hostname or IP address (for daemon mode)  --foreground             : run in foreground (useful for debugging)  -h [--help]              : display this help  --version                : display version  -i [--inetd]             : inetd mode  -r [--root] arg          : root of directory to serve  -R [--read-only]         : deprecated; use repository config file  -t [--tunnel]            : tunnel mode  --tunnel-user arg        : tunnel username (default is current uid's name)  -T [--threads]           : use threads instead of fork  -X [--listen-once]       : listen once (useful for debugging)</pre><p>我们执行svnserve -d -r /root/svnrepo </p><p>然后在刚才的svnlocal目录下，执行 </p><pre>[root@localhost svnlocal]# svn checkout svn://localhost/project exo</pre>就可以通过网络协议check出指定的repo或者其中的模块 
<p>注意：如果我们启动时候，只是用svnserve -d而没有制定repo路径的话，那么你在checkout的时候就必须使用是svn checkout svn://localhost/root/svnrepo/project exo 来指明全路径。 </p><p>接下来，我们随便修改一个文件，然后执行 </p><pre>[root@localhost exo-build]# svn commit -m "test"</pre>你会发现提示说：“提交失败，svn: Connection is read-only” 这说明svn://访问方式没有用户权限控制，只能最基本的匿名下载使用。 
<p> </p><h3>权限配置</h3>先介绍svnserve使用的基于文件的权限控制 
<p>进入/root/svnrepo/conf/ 打开svnserve.conf，修改一下两行 </p><pre>[general]anon-access = noneauth-access = write password-db = passwd</pre>注意：所有的行都必须顶格，否则报错。 
<p>在相同目录下建立一个passwd文件，使用vi passwd命令。在里面输入 </p><pre>[users]danny = dannybobo = bobo</pre>重新启动svnserve，svnserve -d -r /root/svnrepo/ 。 
<p>好，接下来，我们执行 </p><pre>[root@localhost svnlocal]# svn checkout svn://localhost/project exo</pre>根据提示依次输入"root"的密码（任意），用户登陆名名（danny_xcz）和密码(pass)。就可以正常chekout需要的目录了。登陆一次以后再执行svn update等命令时无需再次输入认证密码。 <br clear="all" /><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=202474</p><img src ="http://www.blogjava.net/i369/aggbug/84431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-29 22:27 <a href="http://www.blogjava.net/i369/articles/84431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天开始试用SVN进行版本控制 </title><link>http://www.blogjava.net/i369/articles/84352.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 29 Nov 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84352.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84352.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84352.html</trackback:ping><description><![CDATA[
		<p>无意中结识SVN，刚好工作中可以使用上，试用了一下，觉得不错，在网上找了些资料开始学习：）</p>
		<p> </p>
		<p>一下内容为转贴，忘记在哪里找的了：（</p>
		<p>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝</p>
		<p>SVN安装日志 <br />1,下载<br />(1) svn-1.0.9-setup.exe<br />(2) TortoiseSVN-1.1.2-UNICODE_svn-1.1.2.msi<br />(3) SVNService</p>
		<p>2,安装SVN Server<br />(1) 安装svn-1.0.9-setup.exe,安装目录为D:\Program Files\Subversion.<br />(2) 安装TortoiseSVN-1.1.2-UNICODE_svn-1.1.2.msi.安装目录为D:\Program Files\TortoiseSVN.<br />安装后者需要重启计算机.<br />(3) 将SVNService压缩包中的SVNService.exe copy到D:\Program Files\Subversion\bin中.<br />(4) 建立新目录E:\SVNRepo,作为Repository的主目录.<br />(5) 将SVN Server包装成服务运行: 开始-&gt;运行. 输入"cmd",回车,进入命令行界面.<br />进入D:\Program Files\Subversion\bin. 运行 SVNService -install -d -r e:\SVNRepo .将SVN Server注册成后台服务,并将Repository主目录设置到E:\SVNRepo.<br />(6) 进入计算机管理-&gt;服务和服务程序-&gt;服务.可以看见SVNService服务,将其启动类型从手动改为自动.(7) 启动服务.<br />(8) 如果安装有防火墙,则需要打开3690端口.</p>
		<p>3,Demo<br />(1) 在E:\SVNRepo下新建目录"Default",点右键,TortoiseSVN-&gt;Create Repository Here,选择BDB.<br />(2) 进入E:\SVNRepo\Default\conf</p>
		<p>在E:\SVNRepo\Default\conf目录下,新建users.conf文件.users.conf保存用户名和密码.格式如下:<br />[users]<br />username = password</p>
		<p>用文本编辑器打开svnserve.conf,向其中添加<br />[general]<br />anon-access = none<br />auth-access = write<br />password-db = users.conf</p>
		<p>(3) 点右键,TortoiseSVN-&gt;RepoBrowse,输入svn://&lt;serverip&gt;/Default,回车.输入users.conf中存在的用户名和密码,就可以进入Repository啦!<br /></p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=627189</p>
<img src ="http://www.blogjava.net/i369/aggbug/84352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-29 14:55 <a href="http://www.blogjava.net/i369/articles/84352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion快速入门教程(转) </title><link>http://www.blogjava.net/i369/articles/84351.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 29 Nov 2006 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84351.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84351.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84351.html</trackback:ping><description><![CDATA[
		<table class="contentpaneopen">
				<tbody>
						<tr>
								<td valign="top" align="left" width="70%" colspan="2">
										<span class="small">
												<strong>
														<font color="#999999">作者： Rock Sun </font>
												</strong>
										</span>   </td>
						</tr>
						<tr>
								<td class="createdate" valign="top" colspan="2">2005-10-20 </td>
						</tr>
						<tr>
								<td valign="top" colspan="2">如何快速建立Subversion服务器，并且在项目中使用起来，这是大家最关心的问题，与CVS相比，Subversion有更多的选择，也更加的容易，几个命令就可以建立一套服务器环境，可以使用起来，这里配套有<a href="http://www.subversion.org.cn/media/all.swf" target="_self"><strong><font color="#7ecb4b">动画教程</font></strong></a>。<br /><br />本文是使用Subversion最快速的教程，在最短的时间里帮助您建立起一套可用的服务器环境，只需略加调整就可以应用到实际项目当中。<br /><br /><br />本教程分为以下几个部门，不仅仅是快速入门，最后我们还有一些高级功能的说明，为了说明简单，教程是在windows下使用的方式，以方便资源有限的项目使用，对于UNIX环境下，区别并不大。<br /><br /><ol><li>软件下载 
</li><li>服务器和客户端安装<br /></li><li>建立版本库（Repository） 
</li><li>配置用户和权限<br /></li><li>运行独立服务器 
</li><li>初始化导入 
</li><li>基本客户端操作 </li></ol><strong>1，软件下载<br /><br /></strong><ul><li>下载Subversion服务器程序。 </li></ul>到<a href="http://subversion.tigris.org/" target="_self"><strong><font color="#7ecb4b">官方网站</font></strong></a> 的下载二进制安装文件，来到<a href="http://subversion.tigris.org/project_packages.html#binary-packages" target="_self"><strong><font color="#7ecb4b">二进制包下载部分</font></strong></a>  ，找到 Windows NT, 2000, XP and 2003部分，然后选择"<a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91"><strong><font color="#7ecb4b">this directory</font></strong></a>"，这样我们可以看到许多下载的内容，目前可以下栽<a onclick="return launch(this.href, 1)" href="http://subversion.tigris.org/files/documents/15/25364/svn-1.2.3-setup.exe"><strong><font color="#7ecb4b"> svn-1.2.3-setup.exe</font></strong></a>。<br /><br /><ul><li>下载Subversion的Windows客户端TortoiseSVN。 </li></ul>TortoiseSVN是扩展Windows Shell的一套工具，可以看作Windows资源管理器的插件，安装之后Windows就可以识别Subversion的工作目录。<br />官方网站是<a href="http://tortoisesvn.tigris.org/"><strong><font color="#7ecb4b">TortoiseSVN</font></strong></a>，下载方式和前面的svn服务器类似，在<a href="http://tortoisesvn.tigris.org/download.html"><strong><font color="#7ecb4b">Download</font></strong></a>页面的我们选择Official version for Win2k/XP or higher的版本，然后在sourceforge的<a href="http://sourceforge.net/project/showfiles.php?group_id=138498&amp;package_id=151948" target="_self"><strong><font color="#7ecb4b">下载页面</font></strong></a>选择目前的最高稳定版本的安装文件<a href="http://prdownloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.2.4.4479-svn-1.2.3.msi?download"><strong><font color="#7ecb4b">TortoiseSVN-1.2.4.4479-svn-1.2.3.msi</font></strong></a>。<br /><br /><br /><strong>2，服务器和客户端安装<br /><br /></strong><ul><li>服务器安装，直接运行<a onclick="return launch(this.href, 1)" href="http://subversion.tigris.org/files/documents/15/25364/svn-1.2.3-setup.exe"><strong><font color="#7ecb4b">svn-1.2.3-setup.exe</font></strong></a>，根据提示安装即可，这样我们就有了一套服务器可以运行的环境。 
</li><li>安装TortoiseSVN，同样直接运行<a href="http://prdownloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.2.4.4479-svn-1.2.3.msi?download"><strong><font color="#7ecb4b">TortoiseSVN-1.2.4.4479-svn-1.2.3.msi</font></strong></a>按照提示安装即可，不过最后完成后会提示是否重启，其实重启只是使svn工作拷贝在windows中的特殊样式生效，与所有的实际功能无关，这里为了立刻看到好的效果，还是重新启动机器。 </li></ul><br /><br /><strong>3，建立版本库（Repository）<br /><br /></strong>运行Subversion服务器需要首先要建立一个版本库（Repository），可以看作服务器上存放数据的数据库，在安装了Subversion服务器之后，可以直接运行，如：<strong><br /></strong><blockquote><pre>svnadmin create E:\svndemo\repository<br /></pre></blockquote><div align="left"><pre>就会在目录E:\svndemo\repository下创建一个版本库。<br /><br />我们也可以使用TortoiseSVN图形化的完成这一步：<br /></pre><blockquote>在目录E:\svndemo\repository下"右键-&gt;TortoiseSVN-&gt;Create Repository here...“， 然后可以选择版本库模式， 这里使用默认即可， 然后就创建了一系列目录和文件。<br /></blockquote></div><strong>4，配置用户和权限<br /><br /></strong>来到E:\svndemo\repository\conf目录，修改svnserve.conf：<br /><blockquote># [general]<br /># password-db = passwd<br /></blockquote>改为：<br /><blockquote>[general]<br />password-db = passwd</blockquote>然后修改同目录的passwd文件，去掉下面三行的注释：<br /><blockquote># [users]<br /># harry = harryssecret<br /># sally = sallyssecret<br /></blockquote>最后变成：<br /><blockquote>[users]<br />harry = harryssecret<br />sally = sallyssecret<br /></blockquote><strong><br />5，运行独立服务器<br /><br /></strong>在任意目录下运行：<br /><blockquote>svnserve -d -r E:\svndemo\repository </blockquote>我们的服务器程序就已经启动了。<br /><br /><br /><strong>6，初始化导入<br /><br /></strong>来到我们想要导入的项目根目录，在这个例子里是E:\svndemo\initproject，目录下有一个readme.txt文件：<br /><ol><li>右键-&gt;TortoiseSVN-&gt;Import... 
</li><li>URL of repository输入“svn://localhost/trunk” 
</li><li>ok </li></ol>完成之后目录没有任何变化，如果没有报错，数据就已经全部导入到了我们刚才定义的版本库中。<br /><br /><br /><strong>7，基本客户端操作</strong><br /><strong><br /></strong>取出版本库到一个工作拷贝：<br /><blockquote>来到任意空目录下，在本例中是E:\svndemo\wc1，运行右键-&gt;Checkout，在URL of repository中输入svn://localhost/trunk，这样我们就得到了一份工作拷贝。<br /></blockquote>在工作拷贝中作出修改并提交：<br /><blockquote>打开readme.txt，作出修改，然后右键-&gt;Commit...，这样我们就把修改提交到了版本库，我们可以运行。<br /></blockquote>察看所作的修改：<br /><blockquote>readme.txt上右键-&gt;TortoiseSVN-&gt;Show Log，这样我们就可以看到我们对这个文件所有的提交。在版本1上右键-&gt;Compare with working copy，我们可以比较工作拷贝的文件和版本1的区别。<br /></blockquote><br />最后，所有的内容都已经录制为<a href="http://www.subversion.org.cn/media/all.swf" target="_self"><strong><font color="#7ecb4b">动画文件</font></strong></a>，大家可以参考。<br /></td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=537628</p>
<img src ="http://www.blogjava.net/i369/aggbug/84351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-29 14:51 <a href="http://www.blogjava.net/i369/articles/84351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion和TortoiseSVN的配置体验 </title><link>http://www.blogjava.net/i369/articles/84349.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 29 Nov 2006 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84349.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84349.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84349.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<strong>
						<font color="#ff0000">Subversion和TortoiseSVN的配置体验</font>
				</strong>   <font color="#615134">[ 日期：2006-05-25 ]  </font><div class="content_main"><span id="fontzoom">STEP 1:下载和安装 <br />   首先在Subversion的官方网站去下载windows安装包，最新版是1.3.1。[<a href="http://subversion.tigris.org/servlets/ProjectdocumentList?folderID=91" target="_blank">http://subversion.tigris.org/servlets ... cumentList?folderID=91</a>]<br />下载后安装在本地机器上，这里注意的是最好将安装目录指定为纯英文名目录，安装在中文目录下天知道哪天会冒出一个让你想破头也想不出的错误来。<br />下载TortoiseSVN进行本地安装，我安装的是最新的TortoiseSVN-1.3.3.6219[<a href="http://surfnet.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.3.3.6219-svn-1.3.1.msi" target="_blank">http://surfnet.dl.sourceforge.net/sourceforge/t ... SVN-1.3.3.6219-svn-1.3.1.msi</a>]，这是一个将SVN集成到windows shell中的GUI管理工具，推荐使用。<br /><br /><br />STEP 2:创建储存库 <br />  安装完TortoiseSVN后提示要重启机器，其实启不启都可以正常使用了，首先创建SVN储存库(repository)，可以选择命令行方式或者通过TortoiseSVN插件进行GUI操作，命令行运行如下：<br /><br />svnadmin create F:\_SubVersion<br /><br /><img onmouseover="this.style.cursor='hand';" style="CURSOR: hand" onclick="window.open(this.src);" height="365" alt="按此在新窗口打开图片" src="http://www.85831309.com/blog/attachments/month_0605/1xp4_copyright.jpg" width="515" onload="javascript:DrawImage(this);" border="0" /><br /><br />F:\_SubVersion就是我指定的储存库目录，如果用GUI方式，可以在这个目录下点击右键选择[TotoiseSVN]-&gt;[Create Repository href...]进行创建，版本库模式指定为默认的即可。<br />repository创建完毕后会在目录下生成若干个文件和文件夹，dav目录是提供给Apache与mod_dav_svn使用的目录，让它们存储内部 数据；db目录就是所有版本控制的数据文件；hooks目录放置hook脚本文件的目录；locks用来放置Subversion文件库锁定数据的目录， 用来追踪存取文件库的客户端；format文件是一个文本文件，里面只放了一个整数，表示当前文件库配置的版本号；<br /><br /><br />STEP 3:配置 <br />打开/conf/目录，打开svnserve.conf找到一下两句：<br /><br /><br /># [general]<br /># password-db = passwd<br /><br />去之每行开头的#，其中第二行是指定身份验证的文件名，即passwd文件<br />同样打开passwd文件，将<br /><br /># [users]<br /># harry = harryssecret<br /># sally = sallyssecret<br /><br />这几行的开头#字符去掉，这是设置用户，一行一个，存储格式为“用户名 = 密码”，如可插入一行：admin = admin888，即为系统添加一个用户名为admin，密码为admin888的用户<br /><br /><br />STEP 4:运行SVN服务 <br />在命令行执行<br /><br /><br />svnserve --daemon --root F:\_SubVersion<br />服务启动，--daemon可简写为-d，--root可简写为-r，可以建立一个批处理文件并放在windows启动组中便于开机就运行SVN服务，或者在这个地址[<a href="http://maxwoods.cnblogs.com/Files/MaxWoods/Downloads/SVNService.rar" target="_blank">http://maxwoods.cnblogs.com/Files/ ... loads/SVNService.rar</a>]下载那个svnservice.exe文件，拷贝到E:\svn\bin目录下，再从命令行下执行：<br /><br />svnservice -install --daemon --root "F:\_SubVersion"<br />sc config svnservice start= auto<br />net start svnservice<br /><br />此文件会将SVN变成windows系统的一个服务，并默认为自启动，注意：执行第三句时确保前面以命令行方式运行的SVN服务已经停止，如果没停止可在其窗口中按Ctrl+C中止运行。<br /><br /><br />STEP 5:创建项目版本树 <br />确定SVN服务(命令行或windows服务)运行后，在你需要导入储存库的目录下单击右键选择[TortoiseSVN]-&gt; [Import...]，在弹开的窗口的URL框中输入 "svn://localhost/myproject" 点击 "OK" 执行导入，如果没有报错，数 据就全部加入SVN储存库目录树上了。用命令行也可以完成这些操作，这需要你在系统变量中新建一个“SVN_EDITOR”的系统变量，变量值为本地的一 个文本编辑器执行文件路径，一般指到windows的记事本上就行了 "c:\windows\notepad.exe" ，然后新开一个CMD窗口，执行<br /><br />svn mkdir svn://localhost/myproject<br />随即关闭记事本打开的log文件窗口后按"c"键继续后生成项目树。一般情况，我们在创建文件根路径后应该在创建三个目录：branches、tags、trunk，这三个目录是Subversion需要的三个目录。对于check out、commit、update等操作可以通过svn命令行方式执行，也可以用TortoiseSVN的windows菜单完成，非常简单咯。<br /><p> </p><br /></span></div><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=816965</p><br /></div>
<img src ="http://www.blogjava.net/i369/aggbug/84349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-29 14:50 <a href="http://www.blogjava.net/i369/articles/84349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战SVN For Apache2（二） </title><link>http://www.blogjava.net/i369/articles/84151.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Tue, 28 Nov 2006 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84151.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84151.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84151.html</trackback:ping><description><![CDATA[Error convertoring HTML to XHTML: System.ArgumentException: Cannot have ']]&gt;' inside an XML CDATA block.
   at System.Xml.XmlTextWriter.WriteCData(String text)
   at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
   at FreeTextBoxControls.Support.Formatter.HtmlToXhtml(String input)<img src ="http://www.blogjava.net/i369/aggbug/84151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-28 22:29 <a href="http://www.blogjava.net/i369/articles/84151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战SVN For Apache2（一） </title><link>http://www.blogjava.net/i369/articles/84148.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Tue, 28 Nov 2006 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/84148.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/84148.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/84148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/84148.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/84148.html</trackback:ping><description><![CDATA[Error convertoring HTML to XHTML: System.ArgumentException: Cannot have ']]&gt;' inside an XML CDATA block.
   at System.Xml.XmlTextWriter.WriteCData(String text)
   at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
   at FreeTextBoxControls.Support.Formatter.HtmlToXhtml(String input)<img src ="http://www.blogjava.net/i369/aggbug/84148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-28 22:22 <a href="http://www.blogjava.net/i369/articles/84148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse 中 Subversion 切换 帐号登陆 </title><link>http://www.blogjava.net/i369/articles/83387.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 24 Nov 2006 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/83387.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/83387.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/83387.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/83387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/83387.html</trackback:ping><description><![CDATA[在刚刚使用svn 的时候遇到了点麻烦 <br />研究解决之 发文 提醒各为 少走写弯路<br /><br />我用的eclipse 的svn 插件<br /><br />最初的时候下代码的时候 使用easyjf 这个帐号 点了 保存用户名和密码 <br /><br />后来申请到自己的帐号<br />就出现了切换不过去了的问题 郁闷了2天<br /><br />我试了 废弃 重新定位 <br />甚至 我把eclipse 整个删除了 <br /><br />都不行<br />现象是一新建 资源库  不用用户名和密码 就登陆进去了 登陆进去后没有任何权限<br /><br />四处询问 如何解决 WilliamRaym 一句话(可能不在eclipse文件夹里存了登陆信息) 提醒我<br />最后终于在<br />C:\Documents and Settings\sagitta\Application Data\Subversion\auth\svn.simple <br /><br />这里找了到  进去修改用户名密码  <br />然后一切正常了  <br /><br />发文 提醒各位 少走些弯路 <br /><br /><br />(本文作者：<a href="http://www.easyjf.com/" target="_blank"><font size="2"><font color="#3300ff">EasyJF开源团队</font></font></a><font color="#3300ff" size="2">  <a href="http://www.easyjf.com/bbsuser.ejf?easyJWebCommand=show&amp;&amp;user=%E6%95%A3%E4%BB%99" target="_blank"><font size="3">散仙</font></a></font>　欢迎转载，转载请保留作者声明，谢谢！) <br /><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=782731</p><img src ="http://www.blogjava.net/i369/aggbug/83387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-24 22:36 <a href="http://www.blogjava.net/i369/articles/83387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ECLISPE的快捷键大全 </title><link>http://www.blogjava.net/i369/articles/83309.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 24 Nov 2006 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/83309.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/83309.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/83309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/83309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/83309.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Eclipse 常用快捷键收集2006年09月29日 星期五 12:00Ctrl+1 快速修复(最经典的快捷键,就不用多说了)		Ctrl+D: 删除当前行      		Ctrl+Alt+↓ 复制当前行到下一行(复制增加)		Ctrl+Alt+↑ 复制当前行到上一行(复制增加)		Alt+↓  当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)		Alt+↑   ...&nbsp;&nbsp;<a href='http://www.blogjava.net/i369/articles/83309.html'>阅读全文</a><img src ="http://www.blogjava.net/i369/aggbug/83309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-24 16:54 <a href="http://www.blogjava.net/i369/articles/83309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA开发包、Eclipse 插件安装 </title><link>http://www.blogjava.net/i369/articles/80878.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Mon, 13 Nov 2006 05:13:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/80878.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/80878.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/80878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/80878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/80878.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<div class="postTitle"> </div>
				<strong>相关JAR包：<br /><br />spring-framework-1.1.5</strong> ：http://voxel.dl.sourceforge.net/sourceforge/springframework/spring-framework-1.1.5.p<br /><strong>spring-framework-1.1.5-with-dependencies</strong> ： http://nchc.dl.sourceforge.net/sourceforge/springframework/spring-framework-1.1.5-with-dependencies.p<br /><strong>hibernate-2.1.8</strong> ：http://voxel.dl.sourceforge.net/sourceforge/hibernate/hibernate-2.1.8.p<br /><strong>hibernate-extensions-2.1.3</strong> ：http://nchc.dl.sourceforge.net/sourceforge/hibernate/hibernate-extensions-2.1.3.p<br /><strong>struts-menu-2.3</strong> ：http://optusnet.dl.sourceforge.net/sourceforge/struts-menu/struts-menu-2.3.p<br /><strong>struts-menu.war</strong> ：http://jaist.dl.sourceforge.net/sourceforge/struts-menu/struts-menu.war<br /><strong>Appfuse </strong>：http://appfuse.dev.java.net<br /><br /><br /><strong>eclipse和相关开发插件及插件更新地址：</strong><br /><br /><strong>eclipse download</strong> ： http://eclipse.cis.sinica.edu.tw/downloads/drops/R-3.0.1-200409161125/eclipse-SDK-3.0.1-win32.p<br /><strong>eclipse 3.0.X多国语言包</strong> ：http://download.eclipse.org/eclipse/downloads/drops/L-3.0.1_Translations-200409161125/NLpack-eclipse-SDK-3.0.x-win32.p<br /><strong>lomboz.301</strong> ： http://download.us.forge.objectweb.org/lomboz/lomboz.301.p<br /><strong>emf-sdo-runtime-2.0.0</strong> ： http://download.us.forge.objectweb.org/lomboz/emf-sdo-runtime-2.0.0.p<br /><strong>lomboz_3.0.1.N20050106</strong> ： http://download.us.forge.objectweb.org/lomboz/org.objectweb.lomboz_3.0.1.N20050106.p<br /><span><strong><span align="justify">Easy Strut 0.6.4 for Eclipse : </span></strong></span>http://easystruts.sourceforge.net/index.html#plugin<br /><br /><br /><strong>插件更新地址：<br /><br />Spring plugin</strong> ：http://springframework.sourceforge.net/spring-ide/eclipse/updatesite/<br /><strong>hibernate plugin</strong> ：http://www.binamics.com/hibernatesync<br /><strong>代码折叠</strong><strong> plugin</strong>：http://www.coffee-bytes.com/eclipse/update-site/site.xml<br /><strong>visual editor plugin 1.0</strong>：http://update.eclipse.org/tools/ve/updates/1.0<br /><strong>EMF/SDO/XSD Secondary </strong><strong>plugin</strong> ：http://download.eclipse.org/tools/emf/updates/site.xml<br /><strong>UML 2.0 plugin</strong> ：http://download.eclipse.org/tools/uml2/updates/site.xml<br /><strong>C# plugin</strong> ：http://www.improve-technologies.com/alpha/updates/site.xml<br /><br /><br /><br />不断更新中......<br /><br /><strong>网上收集的--&gt;&gt;<br /><br /></strong><span style="FONT-FAMILY: arial">sourceforge <a href="http://www.sourceforge.net/"><span style="COLOR: navy">http://www.sourceforge.net</span></a></span><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">java.net <a href="http://www.java.net/"><span style="COLOR: navy">http://www.java.net</span></a></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial"><a href="http://www.eclipse.org/"><span style="COLOR: navy">www.eclipse.org</span></a></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial"><a href="http://www.opensource.org/"><span style="COLOR: navy">www.opensource.org</span></a></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">Lomboz <a href="http://www.objectlearn.com/index.jsp"><span style="COLOR: navy">http://www.objectlearn.com/index.jsp</span></a> (J2EE plugin for Eclipse)<br />htmlArea <a href="http://sourceforge.net/projects/itools-htmlarea/"><span style="COLOR: navy">http://sourceforge.net/projects/itools-htmlarea/</span></a> (</span><span style="FONT-FAMILY: 宋体">所见即所得的在线</span><span style="FONT-FAMILY: arial">HTML</span><span style="FONT-FAMILY: 宋体">编辑器</span><span style="FONT-FAMILY: arial">)<br />XmlBuddy <a href="http://www.xmlbuddy.com/"><span style="COLOR: navy">http://www.xmlbuddy.com/</span></a> (XML Editor plugin for Eclipse)<br />JFreeChart <a href="http://www.jfree.org/"><span style="COLOR: navy">http://www.jfree.org/</span></a> (</span><span style="FONT-FAMILY: 宋体">用于生成图表的项目</span><span style="FONT-FAMILY: arial">)<br />EclipseME <a href="http://eclipseme.sourceforge.net/"><span style="COLOR: navy">http://eclipseme.sourceforge.net/</span></a> (J2ME Developmnt Plugin for Eclipse)<br />mvnForum <a href="http://sourceforge.net/projects/mvnforum/"><span style="COLOR: navy">http://sourceforge.net/projects/mvnforum/</span></a> (</span><span style="FONT-FAMILY: 宋体">论坛</span><span style="FONT-FAMILY: arial">)<br />jChatBox <a href="http://www.javazoom.net/index.shtml"><span style="COLOR: navy">http://www.javazoom.net/index.shtml</span></a> (</span><span style="FONT-FAMILY: 宋体">用</span><span style="FONT-FAMILY: arial">servlet</span><span style="FONT-FAMILY: 宋体">实现的</span><span style="FONT-FAMILY: arial">WEB</span><span style="FONT-FAMILY: 宋体">聊天引擎</span><span style="FONT-FAMILY: arial">)<br />POI <a href="http://jakarta.apache.org/poi/index.html"><span style="COLOR: navy">http://jakarta.apache.org/poi/index.html</span></a> (</span><span style="FONT-FAMILY: 宋体">用于处理</span><span style="FONT-FAMILY: arial">Excel,WORD</span><span style="FONT-FAMILY: 宋体">等文档的项目</span><span style="FONT-FAMILY: arial">)<br />FileUpload <a href="http://jakarta.apache.org/commons/fileupload/"><span style="COLOR: navy">http://jakarta.apache.org/commons/fileupload/</span></a> (</span><span style="FONT-FAMILY: 宋体">用于处理</span><span style="FONT-FAMILY: arial">HTTP</span><span style="FONT-FAMILY: 宋体">文件上传得项目</span><span style="FONT-FAMILY: arial">)<br />PDFBox <a href="http://sourceforge.net/projects/pdfbox/"><span style="COLOR: navy">http://sourceforge.net/projects/pdfbox/</span></a> (</span><span style="FONT-FAMILY: 宋体">处理</span><span style="FONT-FAMILY: arial">PDF</span><span style="FONT-FAMILY: 宋体">文档的项目</span><span style="FONT-FAMILY: arial">)<br />Lucene <a href="http://jakarta.apache.org/lucene/index.html"><span style="COLOR: navy">http://jakarta.apache.org/lucene/index.html</span></a> (</span><span style="FONT-FAMILY: 宋体">搜索引擎</span><span style="FONT-FAMILY: arial">)<br />Digester <a href="http://jakarta.apache.org/commons/digester/"><span style="COLOR: navy">http://jakarta.apache.org/commons/digester/</span></a> (</span><span style="FONT-FAMILY: 宋体">处理</span><span style="FONT-FAMILY: arial">XML</span><span style="FONT-FAMILY: 宋体">信息的项目</span><span style="FONT-FAMILY: arial">)<br />DBCP <a href="http://jakarta.apache.org/commons/dbcp/"><span style="COLOR: navy">http://jakarta.apache.org/commons/dbcp/</span></a> (</span><span style="FONT-FAMILY: 宋体">数据库连接池</span><span style="FONT-FAMILY: arial">)<br />AXIS <a href="http://ws.apache.org/axis/"><span style="COLOR: navy">http://ws.apache.org/axis/</span></a> (WebService </span><span style="FONT-FAMILY: 宋体">的实现框架</span><span style="FONT-FAMILY: arial">)<br />Jetspeed <a href="http://portals.apache.org/jetspeed-1/"><span style="COLOR: navy">http://portals.apache.org/jetspeed-1/</span></a> (Portal)<br />HSQLDB <a href="http://sourceforge.net/projects/hsqldb/"><span style="COLOR: navy">http://sourceforge.net/projects/hsqldb/</span></a> (Im memory Database Engine)<br />CEWOLF <a href="http://sourceforge.net/projects/cewolf/"><span style="COLOR: navy">http://sourceforge.net/projects/cewolf/</span></a> (</span><span style="FONT-FAMILY: 宋体">一套标签库实现</span><span style="FONT-FAMILY: arial">Web</span><span style="FONT-FAMILY: 宋体">报表</span><span style="FONT-FAMILY: arial">,</span><span style="FONT-FAMILY: 宋体">使用的是</span><span style="FONT-FAMILY: arial">jFreeChart</span><span style="FONT-FAMILY: 宋体">引擎</span><span style="FONT-FAMILY: arial">)<br />Struts Menu <a href="http://sourceforge.net/projects/struts-menu/"><span style="COLOR: navy">http://sourceforge.net/projects/struts-menu/</span></a> (</span><span style="FONT-FAMILY: 宋体">基于</span><span style="FONT-FAMILY: arial">Struts</span><span style="FONT-FAMILY: 宋体">的</span><span style="FONT-FAMILY: arial">Web</span><span style="FONT-FAMILY: 宋体">菜单项目</span><span style="FONT-FAMILY: arial">)<br />htmlparser <a href="http://sourceforge.net/projects/htmlparser/"><span style="COLOR: navy">http://sourceforge.net/projects/htmlparser/</span></a> (</span><span style="FONT-FAMILY: 宋体">用于解析</span><span style="FONT-FAMILY: arial">HTML</span><span style="FONT-FAMILY: 宋体">信息的项目</span><span style="FONT-FAMILY: arial">)<br />Mondrian <span style="COLOR: navy"><a href="http://sourceforge.net/projects/mondrian/%28Open">http://sourceforge.net/projects/mondrian/</a></span>(Open Source OLAP Database)<br />ProGuard <span style="COLOR: navy"><a href="http://sourceforge.net/projects/proguard/%28Java">http://sourceforge.net/projects/proguard/</a></span>(Java</span><span style="FONT-FAMILY: 宋体">的混淆器</span><span style="FONT-FAMILY: arial">)<br />InfoGlue <a href="http://sourceforge.net/projects/infoglue/"><span style="COLOR: navy">http://sourceforge.net/projects/infoglue/</span></a> (J2EE </span><span style="FONT-FAMILY: 宋体">内容管理系统</span><span style="FONT-FAMILY: arial">)<br />JPivot <a href="http://sourceforge.net/projects/jpivot/"><span style="COLOR: navy">http://sourceforge.net/projects/jpivot/</span></a> (</span><span style="FONT-FAMILY: 宋体">基于</span><span style="FONT-FAMILY: arial">WEB</span><span style="FONT-FAMILY: 宋体">的</span><span style="FONT-FAMILY: arial">OLAP </span><span style="FONT-FAMILY: 宋体">展现</span><span style="FONT-FAMILY: arial">)<br /><a href="http://java-source.net/"><span style="COLOR: navy">http://java-source.net/</span></a></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">(5)</span><span style="FONT-FAMILY: 宋体">几个常用</span><span style="FONT-FAMILY: arial">JAVA</span><span style="FONT-FAMILY: 宋体">开源项目的地址荟萃</span><span style="FONT-FAMILY: arial">:<br />Lomboz <a href="http://www.objectlearn.com/index.jsp">http://www.objectlearn.com/index.jsp</a> (J2EE plugin for Eclipse)<br />htmlArea <a href="http://sourceforge.net/projects/itools-htmlarea/">http://sourceforge.net/projects/itools-htmlarea/</a> (</span><span style="FONT-FAMILY: 宋体">所见即所得的在线</span><span style="FONT-FAMILY: arial">HTML</span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: 宋体">编辑器</span><span style="FONT-FAMILY: arial">)<br />XmlBuddy <a href="http://www.xmlbuddy.com/">http://www.xmlbuddy.com/</a> (XML Editor plugin for Eclipse)<br />JFreeChart <a href="http://www.jfree.org/">http://www.jfree.org/</a> (</span><span style="FONT-FAMILY: 宋体">用于生成图表的项目</span><span style="FONT-FAMILY: arial">)<br />EclipseME <a href="http://eclipseme.sourceforge.net/">http://eclipseme.sourceforge.net/</a> (J2ME Developmnt Plugin for Eclipse)<br />mvnForum <a href="http://sourceforge.net/projects/mvnforum/">http://sourceforge.net/projects/mvnforum/</a> (</span><span style="FONT-FAMILY: 宋体">论坛</span><span style="FONT-FAMILY: arial">)<br />jChatBox <a href="http://www.javazoom.net/index.shtml">http://www.javazoom.net/index.shtml</a> (</span><span style="FONT-FAMILY: 宋体">用</span><span style="FONT-FAMILY: arial">servlet</span><span style="FONT-FAMILY: 宋体">实现的</span><span style="FONT-FAMILY: arial">WEB</span><span style="FONT-FAMILY: 宋体">聊天引擎</span><span style="FONT-FAMILY: arial">)<br />POI <a href="http://jakarta.apache.org/poi/index.html">http://jakarta.apache.org/poi/index.html</a> (</span><span style="FONT-FAMILY: 宋体">用于处理</span><span style="FONT-FAMILY: arial">Excel,WORD</span><span style="FONT-FAMILY: 宋体">等文档</span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: 宋体">的项目</span><span style="FONT-FAMILY: arial">)<br />FileUpload <a href="http://jakarta.apache.org/commons/fileupload/">http://jakarta.apache.org/commons/fileupload/</a> (</span><span style="FONT-FAMILY: 宋体">用于处理</span><span style="FONT-FAMILY: arial">HTTP</span><span style="FONT-FAMILY: 宋体">文件上传得项</span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: 宋体">目</span><span style="FONT-FAMILY: arial">)<br />PDFBox <a href="http://sourceforge.net/projects/pdfbox/">http://sourceforge.net/projects/pdfbox/</a> (</span><span style="FONT-FAMILY: 宋体">处理</span><span style="FONT-FAMILY: arial">PDF</span><span style="FONT-FAMILY: 宋体">文档的项目</span><span style="FONT-FAMILY: arial">)<br />Lucene <a href="http://jakarta.apache.org/lucene/index.html">http://jakarta.apache.org/lucene/index.html</a> (</span><span style="FONT-FAMILY: 宋体">搜索引擎</span><span style="FONT-FAMILY: arial">)<br />Digester <a href="http://jakarta.apache.org/commons/digester/">http://jakarta.apache.org/commons/digester/</a> (</span><span style="FONT-FAMILY: 宋体">处理</span><span style="FONT-FAMILY: arial">XML</span><span style="FONT-FAMILY: 宋体">信息的项目</span><span style="FONT-FAMILY: arial">)<br />DBCP <a href="http://jakarta.apache.org/commons/dbcp/">http://jakarta.apache.org/commons/dbcp/</a> (</span><span style="FONT-FAMILY: 宋体">数据库连接池</span><span style="FONT-FAMILY: arial">)<br />AXIS <a href="http://ws.apache.org/axis/">http://ws.apache.org/axis/</a> (WebService </span><span style="FONT-FAMILY: 宋体">的实现框架</span><span style="FONT-FAMILY: arial">)<br />Jetspeed <a href="http://portals.apache.org/jetspeed-1/">http://portals.apache.org/jetspeed-1/</a> (Portal)<br />HSQLDB <a href="http://sourceforge.net/projects/hsqldb/">http://sourceforge.net/projects/hsqldb/</a> (Im memory Database Engine)<br />CEWOLF <a href="http://sourceforge.net/projects/cewolf/">http://sourceforge.net/projects/cewolf/</a></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">(</span><span style="FONT-FAMILY: 宋体">一套标签库实现</span><span style="FONT-FAMILY: arial">Web</span><span style="FONT-FAMILY: 宋体">报表</span><span style="FONT-FAMILY: arial">,</span><span style="FONT-FAMILY: 宋体">使用的是</span><span style="FONT-FAMILY: arial">jFreeChart</span><span style="FONT-FAMILY: 宋体">引擎</span><span style="FONT-FAMILY: arial">)<br />Struts Menu <a href="http://sourceforge.net/projects/struts-menu/">http://sourceforge.net/projects/struts-menu/</a> (</span><span style="FONT-FAMILY: 宋体">基于</span><span style="FONT-FAMILY: arial">Struts</span><span style="FONT-FAMILY: 宋体">的</span><span style="FONT-FAMILY: arial">Web</span><span style="FONT-FAMILY: 宋体">菜单项目</span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">)<br />htmlparser <a href="http://sourceforge.net/projects/htmlparser/">http://sourceforge.net/projects/htmlparser/</a> (</span><span style="FONT-FAMILY: 宋体">用于解析</span><span style="FONT-FAMILY: arial">HTML</span><span style="FONT-FAMILY: 宋体">信息的项目</span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">)<br />Mondrian <a href="http://sourceforge.net/projects/mondrian/">http://sourceforge.net/projects/mondrian/</a> (Open Source OLAP </span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><span style="FONT-FAMILY: arial">Database)<br />ProGuard <a href="http://sourceforge.net/projects/proguard/">http://sourceforge.net/projects/proguard/</a> (Java</span><span style="FONT-FAMILY: 宋体">的混淆器</span><span style="FONT-FAMILY: arial">)<br />InfoGlue <a href="http://sourceforge.net/projects/infoglue/">http://sourceforge.net/projects/infoglue/</a> (J2EE </span><span style="FONT-FAMILY: 宋体">内容管理系统</span><span style="FONT-FAMILY: arial">)<br />JPivot <a href="http://sourceforge.net/projects/jpivot/">http://sourceforge.net/projects/jpivot/</a> (</span><span style="FONT-FAMILY: 宋体">基于</span><span style="FONT-FAMILY: arial">WEB</span><span style="FONT-FAMILY: 宋体">的</span><span style="FONT-FAMILY: arial">OLAP </span><span style="FONT-FAMILY: 宋体">展现</span><span style="FONT-FAMILY: arial">)<br />HttpClient <a href="http://jakarta.apache.org/commons/httpclient/">http://jakarta.apache.org/commons/httpclient/</a></span><span style="FONT-FAMILY: 宋体">处理</span><span style="FONT-FAMILY: arial">http</span><span style="FONT-FAMILY: 宋体">客户端的接口<br /></span></p></div>
<img src ="http://www.blogjava.net/i369/aggbug/80878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-13 13:13 <a href="http://www.blogjava.net/i369/articles/80878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse的快捷键组合功能</title><link>http://www.blogjava.net/i369/articles/80495.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 10 Nov 2006 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/80495.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/80495.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/80495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/80495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/80495.html</trackback:ping><description><![CDATA[
		<h4 class="TextColor1" id="subjcns!F282B7FD3DA0ED1B!361" style="MARGIN-BOTTOM: 0px"> </h4>
		<div id="msgcns!F282B7FD3DA0ED1B!361">
				<div>
						<strong>Eclipse的快捷键组合功能</strong>   来源于网络 
<p>　　使用Eclipse的快捷键组合功能，让你看起来像是在打电玩。特别是让人想起《<a href="http://www.yesky.com/key/4615/44615.html"><u><font color="#0000ff">真人</font></u></a>快打》(Mortal Combat)的感觉。要成为《真人快打》的高手，你必须记住大量的按键顺序。比如，要使出Sub-Zero Skeleton Rip，你必须依次按下和X键。这里的控制杆就是Ctrl，Alt，Shift，字母键，<a href="http://www.yesky.com/key/4340/59340.html"><u><font color="#0000ff">数字键</font></u></a>和功能键的组合。</p><p>　　让我们按照使用频率来看看我最爱用的一些热键组合。(注:以下内容在Eclipse3.02及一上版本通过测试)</p><p>　　1. Control-Shift-T: 打开类型(Open type)。如果你不是有意磨洋工，还是忘记通过<a href="http://www.yesky.com/key/747/45747.html"><u><font color="#0000ff">源码</font></u></a>树(source tree)打开的方式吧。</p><p>　　2. Control-Shift-R: 打开资源(不只是用来寻找Java文件)。小提示:利用Navigator视图的黄色双向箭头按钮让你的编辑窗口和导航器相关联。这会让你打开的文件对应显示在导航器的层级结构中，这样便于组织信息。如果这影响了速度，就关掉它。</p><p>　　3. F3: 打开申明(Open declaration)。或者，利用Declaration Tab(在Java视图模式下，选择Windows --&gt; Show View -- &gt; Declaration)。当你选中代码中的一个方法，然后按这个按键，它会把整个方法在申明方框里显示出来。</p><p>　　4. Alt-left arrow: 在导航历史记录(Navigation History)中后退。就像Web浏览器的后退按钮一样，在利用F3跳转之后，特别有用。(用来返回原先编译的地方)</p><p>　　5. Alt-right arrow: 导航历史记录中向前。</p><p>　　6. Control-Q: 回到最后依次编辑的地方。这个快捷键也是当你在代码中跳转后用的。特别是当你钻的过深，忘记你最初在做什么的时候。</p><p>　　7. Control-Shift-G: 在workspace中搜索引用(reference)。这是重构的前提。对于方法，这个热键的作用和F3恰好相反。它使你在方法的栈中，向上找出一个方法的所有调用者。一个与此相关的功能是开启“标记”功能(occurrence marking) 。选择Windows-&gt;Preferences-&gt;Java-&gt; Editor-&gt; Mark Occurrences，勾选选项。这时，当你单击一个元素的时候，代码中所有该元素存在的地方都会被高亮显示。我个人只使用“标记本地变量”(Mark Local Variables)。注意:太多的高亮显示会拖慢Eclipse。</p><p>　　8. Control-Shift-F: 根据代码风格设定重新格式化代码。我们的团队有统一的代码格式，我们把它放在我们的wiki上。要这么做，我们打开Eclipse，选择WindowPreferencesJavaCode Style，然后设置Code Formatter，Code Style和Organize Imports。利用<a href="http://www.yesky.com/key/1455/31455.html"><u><font color="#0000ff">导出</font></u></a>(Export)功能来生成配置文件。我们把这些配置文件放在wiki上，然后团队里的每个人都导入到自己的Eclipse中。</p><p>　　9. Control-O: 快速概要(quick outline)。通过这个快捷键，你可以迅速的跳到一个方法或者属性，只需要输入名字的头几个字母。</p><p>　　10. Control-/: 对一行注释或取消注释。对于多行也同样适用。</p><p>　　11. Control-Alt-down arrow: 复制高亮显示的一行或多行。</p><p>　　12. Alt-down arrow: 将一行或多行向下移动。Alt-up arrow会向上移动。</p><p>　　其他的热键在菜单里有。你可以通过按下Control-Shift-L(从3.1版本开始)，看到所有快捷键的列表。按下Control-Shift-L两次，会显示热键对话框(Keys Preferences dialog)，你可以在这里自己设置热键。我欢迎你在Talkback部分发表你的Eclipse提示。</p><p><strong>其他的Eclipse窍门</strong></p><p>　　我总结了几个相关的小窍门:</p><p>　　<strong>锁定命令行窗口:</strong>在命令行视图中(Window Show View Other Basic Console)，试试看用滚动锁定按钮来锁定控制台输出不要滚屏。</p><p>　　使用Ant视图:在我的Java或Debug模式下，我喜欢显示出Ant视图，这样我就可以迅速的运行Ant任务。通过Window  Show View  Other  Ant可以找到该视图。把Ant视图放在屏幕的一角， 通过“添加编译文件(Add Buildfiles)”按钮来添加build.xml文件。在3.1版本中，甚至支持Ant调试脚本语言。</p><p>　　<strong>自动遍历一个集合:</strong>for + Control-Space: 如果你还不知道，那么你应该记住Control-Space是自动完成功能。在Eclipse中，你还可以自动完成结构。在一个数组或集合范围内，试试看输入“for”然后按下Control-Space键。Eclipse会问你你想要遍历哪一个集合然后自动完成循环代码。</p><p>　　<strong>使用分级布局:</strong>在包浏览视图(Package Explorer view)中默认的布局(扁平式)方式让我困惑，它把包的全名显示在导航树(navigation tree)中。我更喜欢我源码的包和文件系统视图，在Eclipse中叫做分级布局(Hierarchical Layout)。要切换到这种模式，点击包浏览视图中向下的按钮，选择布局(Layout)，然后选择分级(Hierarchial)。</p><p>　　<strong>一次显示多个文件:</strong>你可以一次浏览多个文件。把不在激活状态的编辑窗口拖到激活窗口的底部或侧边的滚动条上，就可以打开该编辑窗口。这是我能描述该窍门的最好方式了。</p><p>　　<strong>同时打开两个Eclipse:</strong>要将改动从一个CVS分支上合并到另外一个上，我喜欢通过同时打开两个工作目录(Workspace)不同Eclipse来实现。这样我可以通过比较CVS上的最新版本看到所有的变化(右键单击工程，然后选择Compare with  Lastest from HEAD)然后把每一个变化都合并到另外一个CVS分支上。启动多个Eclipse的最简单的方法是利用Eclipse Launcher。</p><p>　　<strong>Implementors插件:</strong>安装一个能够跳到一个接口的实现的插件。如果你是个dependency injection 粉丝，或者正在基于编写优良的接口工作，那么你需要一个这样的插件来加速代码导航。 你可以在SourceForge找到这个插件。</p><p>　　就像Modest Mouse乐队的歌曲“Out of Gas”唱的，“意见就像小猫，我已经送给别人”。这些是我的Eclipse小猫，希望你能给它找一个温暖的家。</p></div>
		</div>
<img src ="http://www.blogjava.net/i369/aggbug/80495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2006-11-10 21:42 <a href="http://www.blogjava.net/i369/articles/80495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>