﻿<?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-BaNg-随笔分类-Java</title><link>http://www.blogjava.net/lifesting/category/29580.html</link><description>Just Do It!</description><language>zh-cn</language><lastBuildDate>Sat, 31 May 2008 10:12:30 GMT</lastBuildDate><pubDate>Sat, 31 May 2008 10:12:30 GMT</pubDate><ttl>60</ttl><item><title>因为Eclipse包结构改动带来的RCP启动失败。</title><link>http://www.blogjava.net/lifesting/archive/2008/05/30/204061.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 30 May 2008 05:08:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/05/30/204061.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/204061.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/05/30/204061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/204061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/204061.html</trackback:ping><description><![CDATA[最近要将原来的RCP 3.2的项目从GEF改为GMF 2，只能使用Eclipse 3.3来开发，当我把在3.2下运行很好的项目倒入到3.3启动的时候报告一个很奇怪的错误：<br />
<br />
!ENTRY org.eclipse.osgi 4 0 2008-05-30 12:54:33.671<br />
!MESSAGE Application error<br />
!STACK 1<br />
java.lang.RuntimeException: <span style="color: red;">Application "org.eclipse.ui.ide.workbench" could not be found in the registry.</span> The applications available are: org.eclipse.jdt.core.JavaCodeFormatter, org.eclipse.update.core.standaloneUpdate, org.eclipse.update.core.siteOptimizer, org.eclipse.equinox.app.error.<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.equinox.internal.app.EclipseAppContainer.start(EclipseAppContainer.java:98)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.equinox.internal.app.Activator.addingService(Activator.java:112)<br />
&nbsp;&nbsp; &nbsp;at org.osgi.util.tracker.ServiceTracker$Tracked.trackAdding(ServiceTracker.java:1064)<br />
&nbsp;&nbsp; &nbsp;at org.osgi.util.tracker.ServiceTracker$Tracked.trackInitialServices(ServiceTracker.java:926)<br />
&nbsp;&nbsp; &nbsp;at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:330)<br />
&nbsp;&nbsp; &nbsp;at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:274)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.equinox.internal.app.Activator.start(Activator.java:54)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)<br />
&nbsp;&nbsp; &nbsp;at java.security.AccessController.doPrivileged(Native Method)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:417)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:340)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:37)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:405)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:369)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:357)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)<br />
&nbsp;&nbsp; &nbsp;at java.lang.ClassLoader.loadClass(ClassLoader.java:251)<br />
&nbsp;&nbsp; &nbsp;at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.core.internal.runtime.PlatformActivator.startAppContainer(PlatformActivator.java:47)<br />
&nbsp;&nbsp; &nbsp;at org.eclipse.core.internal.runtime.PlatformActivator.start(PlatformActivator.java:32)<br />
....<br />
<br />
红色字体表示workbench这个application并没有加载到RCP runtime中来，Plugin registry里面没有注册信息，在3.2中 extension org.eclipse.ui.ide.workbench是申明在插件org.eclipse.ui.ide中的，通过Plugin Registry Search，发现在3.3中，这个extension declaration被挪到插件org.eclipse.ui.ide.application中了，于是<strong><span style="color: red;">在项目的product配置中加入org.eclipse.ui.ide.application这个插件依赖，然后选中这个插件，点击"Add Required Plug-ins"</span></strong>，再clear, 启动，运行正常。<br />
<br />
从这个令人恼火的改动来看，Eclipse在逐渐向它的两个趋势之一靠拢，即成为产品开发平台(RCP)。(另外一个是向OSGi标准看齐)<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/204061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-05-30 13:08 <a href="http://www.blogjava.net/lifesting/archive/2008/05/30/204061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows批处理中对带空格路径的处理</title><link>http://www.blogjava.net/lifesting/archive/2008/04/23/195102.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Wed, 23 Apr 2008 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/04/23/195102.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/195102.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/04/23/195102.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/195102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/195102.html</trackback:ping><description><![CDATA[<p>一般在Windows的软件大部分安装在c:\ Program Files下面，比如我机器上的Java位置就是C:\Program Files\Java\jdk1.5.0_12，假如如果你在批处理中调用java或者javaw，会这么写：<br />
<br />
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12<br />
set EXE_JAVA=%JAVA_HOME%\bin\java<br />
%EXE_JAVA% -version<br />
<br />
那样会报告一个错误：<br />
<span style="color: red">'C:\Program' 不是内部或外部命令，也不是可运行的程序<br />
或批处理文件。</span><br />
<br />
以前为了避免这种问题，会把把JDK挪到c:\，但不是一个通用的解决办法，现在可以采用两种方式来解决：<br />
<br />
1 加上引号，表示一个完整路径，这个在好多服务器批处理中常用到比如jboss,&nbsp; tomcat。<br />
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12<br />
set EXE_JAVA=<span style="color: red"><strong>"%JAVA_HOME%"</strong></span>\bin\java <br />
%EXE_JAVA% -version<br />
<br />
2 转成短路径，这个我认为是最好的解决办法。<br />
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12<br />
<span style="color: #0000ff"><strong>for %x in ("%JAVA_HOME%") do set JAVA_HOME=%~sx</strong></span><br />
set EXE_JAVA=%JAVA_HOME%\bin\java<br />
%EXE_JAVA% -version<br />
<br />
需要注意的是，在批处理文件比如 run.bat 中，上面的for语句的变量有<strong>两个%%</strong>号。<br />
<span style="color: #0000ff"><strong>for %%x in ("%JAVA_HOME%") do set JAVA_HOME=%%~sx</strong></span><br />
<br />
<br />
<br />
<br />
</p>
<img src ="http://www.blogjava.net/lifesting/aggbug/195102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-04-23 15:04 <a href="http://www.blogjava.net/lifesting/archive/2008/04/23/195102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在批处理中加载某个目录所有的jar</title><link>http://www.blogjava.net/lifesting/archive/2008/04/13/192562.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Sun, 13 Apr 2008 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/04/13/192562.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/192562.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/04/13/192562.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/192562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/192562.html</trackback:ping><description><![CDATA[我平常做服务器或者应用程序的时候喜欢把各种依赖包如log4j, jdbc, commons-lang等放到一个lib目录下，然后启动的时候将这些jar包设置到classpath上。以前我经常使用set classpath=log4j.jar;jdbc.jar;commons-lang.jar硬加载，但<span style="color: red">问题就是每新加入一个jar，就得改批处理一次，再就是每开发一个就得这么设置一次。</span>很烦人，perl 创始人说，偷懒的程序员才是好程序员:)，我需要一个通用的加载方式。<br />
<br />
不管linux/windows或其它OS，都提供一个shell与kernel交互，并且shell都有一个类似的for内置commnd。<br />
<br />
下面是linux bash的尝试<br />
<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"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">#</span><span style="color: #008000">!/usr/bin/sh</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />clspath</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">bootstrap.jar</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;k&nbsp;in&nbsp;</span><span style="color: #000000">*.</span><span style="color: #000000">jar<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">do</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;clspath</span><span style="color: #000000">=</span><span style="color: #800080">$clspath</span><span style="color: #000000">:</span><span style="color: #800080">$PWD</span><span style="color: #000000">/</span><span style="color: #800080">$k</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;echo&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">current&nbsp;jar&nbsp;is&nbsp;$k.</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />done<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">printf</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">classpath&nbsp;is&nbsp;%s</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$clspath</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
工作的很好，于是在windows同样try了一下batch<br />
<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"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #800080">@echo</span><span style="color: #000000">&nbsp;off<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />set&nbsp;clspath</span><span style="color: #000000">=</span><span style="color: #000000">bootstrap</span><span style="color: #000000">.</span><span style="color: #000000">jar<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #800080">%j</span><span style="color: #000000">&nbsp;in&nbsp;(</span><span style="color: #000000">*.</span><span style="color: #000000">jar)&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />set&nbsp;clspath</span><span style="color: #000000">=</span><span style="color: #800080">%clspath</span><span style="color: #000000">%</span><span style="color: #000000">;</span><span style="color: #800080">%cd</span><span style="color: #000000">%\%</span><span style="color: #800080">%j</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />echo&nbsp;current&nbsp;jar&nbsp;is&nbsp;</span><span style="color: #000000">%</span><span style="color: #800080">%j</span><span style="color: #000000">.</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />echo&nbsp;classpath&nbsp;is&nbsp;</span><span style="color: #800080">%clspath</span><span style="color: #000000">%</span></div>
<br />
很奇怪的是最后的结果却是 classpath is <span style="color: #ff0000">bootstrap.jar;D:\workflow\bingo\lib\servlet-api.jar</span>。很显然batch默认不支持<strong>变量迭代更改</strong>。<br />
google了一下，发现原因，稍微改一下：<br />
&nbsp;
<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: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #800080">@echo</span><span style="color: #000000">&nbsp;off<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />set&nbsp;clspath</span><span style="color: #000000">=</span><span style="color: #000000">bootstrap</span><span style="color: #000000">.</span><span style="color: #000000">jar<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />setlocal&nbsp;enabledelayedexpansion<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #800080">%j</span><span style="color: #000000">&nbsp;in&nbsp;(</span><span style="color: #000000">*.</span><span style="color: #000000">jar)&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;(<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />set&nbsp;clspath</span><span style="color: #000000">=!</span><span style="color: #000000">clspath</span><span style="color: #000000">!</span><span style="color: #000000">;</span><span style="color: #800080">%cd</span><span style="color: #000000">%\%</span><span style="color: #800080">%j</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />echo&nbsp;current&nbsp;jar&nbsp;is&nbsp;</span><span style="color: #000000">%</span><span style="color: #800080">%j</span><span style="color: #000000">.</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />echo&nbsp;classpath&nbsp;is&nbsp;</span><span style="color: #800080">%clspath</span><span style="color: #000000">%</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />endlocal</span></div>
<p><br />
对比一下，可以发现：</p>
<ol>
    <li>第4行加上了setlocal enabledelayedexpansion，即变量延迟展开。
    <li>第10行有一个endlocal，结束这个设置
    <li>第6行把%classpath%变成了!classpath!。 </li>
</ol>
<p>虽然目的达到了，还是要鄙视微软的dos batch，实在很弱，不知Powershell怎样。</p>
<p>参考资料：<br />
&nbsp; &nbsp;<a href="http://technet.microsoft.com/zh-cn/library/bb491001(en-us).aspx">setlocal</a> </p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/lifesting/aggbug/192562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-04-13 15:32 <a href="http://www.blogjava.net/lifesting/archive/2008/04/13/192562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse文件转码插件</title><link>http://www.blogjava.net/lifesting/archive/2008/04/11/192250.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 11 Apr 2008 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/04/11/192250.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/192250.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/04/11/192250.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/192250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/192250.html</trackback:ping><description><![CDATA[<p><a href="/Files/lifesting/com.lifesting.tool.encoding.rar">插件源代码下载</a>&nbsp;(导入插件在workspace中，右键export-&gt;Plug-in Development-&gt;Deployable plug-ins and fragments，然后生成插件binar文件)<br />
<a href="/Files/lifesting/com.lifesting.tool.encoding_1.0.0.zip">二进制包下载</a>&nbsp;&nbsp; （<span style="color: #ff0000"><strong>因为blogjava不许上传jar文件，请下载后将zip后缀改为jar后缀然后拷贝到eclipse/plugins目录</strong></span>)<br />
<br />
<br />
一般在使用Eclipse过程中会有两种跟<strong>文件编码(charset)</strong>有关的情况让我们不愉快。<br />
<br />
<strong>1 导入一个项目。</strong><br />
&nbsp; 假设你的同事做好了一个项目，为了更好的支持国际化，里面的jsp页面都采用UTF-8，然后发给你，你导入到Eclipse的workspace中，一般情况下，在Eclipse中，这些jsp都变成了GBK编码，你双击打开，一堆乱码。假设你知道原因，稍微如下设置一下可以解决问题：<br />
<br />
<img height="540" alt="" src="http://www.blogjava.net/images/blogjava_net/lifesting/setcharset.JPG" width="747" border="0" /><br />
(图1 设置文件编码)<br />
但是，这个项目可能包含1000个jsp文件，且你还可能反反复复碰到这个问题，真是一个体力活。<br />
<br />
<strong>2 改变一个项目文件的编码</strong><br />
这种情况发生比较少，但发生了就是一个大难题。比如公司有两个团队，一个开发的项目jsp采用UTF-8编码，另外一个采用GBK编码。一段时间之后，需要整合两个项目，jsp页面只能采用一种编码，UTF-8/GBK或其它。有经验的人知道这是一个<strong>拷贝/设置编码/粘贴</strong>的过程：<br />
&nbsp;2.1 将某个jsp的内容全部拷贝下来。<br />
&nbsp;2.2 如图1所示将编码设置为统一编码如UTF-8。<br />
&nbsp;2.3 把设置过编码的jsp文件清空，然后粘贴。<br />
&nbsp;好像解决问题很完美，但是Eclipse没有宏，如果文件很多，比如2000个，将是一个恐怖的任务。<br />
<br />
因为这两个问题老是反复的困扰着我的同事，相信也困扰了不少Java开发者，Eclipse转码插件很好很方便的解决了这个问题，它基于Eclipse 3.3开发，所以编译环境最好采用Eclipse 3.3。<br />
<br />
下面是使用步骤<br />
<br />
<span style="color: red">step1.</span> 将插件com.lifesting.tool.encoding_1.0.0.jar拷贝到eclipse/plugins目录下，重启Eclipse。<br />
<br />
<span style="color: red">step2.</span> 选择某个项目，右键选择properties，然后点击Convert Setting进行转码规则设置，如下图：<br />
<img height="528" alt="" src="http://www.blogjava.net/images/blogjava_net/lifesting/projectsetting.JPG" width="768" border="0" /></p>
(图2 项目转码规则设置)<br />
这个表格有四列，分别是<strong>文件后缀</strong>，<strong>文件目前编码</strong>，<strong>转换后的编码</strong>，<strong>是否转换文件内容，</strong>如果转换文件内容，那么对应的是前面所说的第二种情况，不转换文件内容对应的是第一种情况。比如图2的转码规则就是<span style="color: #0000ff">对项目的jsp文件，不管原来是什么编码，统一转为UTF-8编码，并且同时转换文件内容</span>。可以点击右边的Add /Remove按钮来增加/删除规则。最后点击Apply来保存设置。<br />
<br />
<span style="color: #ff0000">step3</span>. 转码<br />
&nbsp;在设置了转码规的项目上，右键选择项目，某几个文件夹或某几个文件(当然一个也可以)，然后点击Lifesting Tools-&gt;Set Encoding。插件将完成转码工作。如果我们选择的是项目，将转换整个项目；如果选择的是文件夹，转换文件夹下所有满足规则的文件；如果选择的是文件，只转换文件。<br />
<img height="672" alt="" src="http://www.blogjava.net/images/blogjava_net/lifesting/changeencoding.JPG" width="542" border="0" /><br />
(图3 转码)<br />
除了这方式外，我们还可以利用Eclipse的文件搜索功能，将搜到的文件进行转码，如下图：<br />
<img height="298" alt="" src="http://www.blogjava.net/images/blogjava_net/lifesting/searchencoding.JPG" width="787" border="0" /><br />
(图4 在search view里转码)<br />
如上图所示，我们搜到了整个workspace的jsp文件，然后点击绿色E小图标，插件将会把所有满足结果的文件转码，每个文件的转换规则依赖它所属项目的转码规则设置。<br />
<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/192250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-04-11 18:54 <a href="http://www.blogjava.net/lifesting/archive/2008/04/11/192250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>