??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美专区一区二区三区,国产精品系列在线,999在线视频http://www.aygfsteel.com/lifesting/category/29581.htmlJust Do It!zh-cnThu, 02 Feb 2012 15:01:41 GMTThu, 02 Feb 2012 15:01:41 GMT60Eclipse中正则表辑ּ删除所有注?/title><link>http://www.aygfsteel.com/lifesting/archive/2012/02/02/369251.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Thu, 02 Feb 2012 09:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2012/02/02/369251.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/369251.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2012/02/02/369251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/369251.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/369251.html</trackback:ping><description><![CDATA[<span style="font-size: 12px;"><strong>表达式: /\*{1,2}[\s\S]*?\*/<br /><br />对应语言注释 /* a lot of words */ 或文档注?/** more words */<br />其中 *因ؓ是regular expression的meta wordQ需要{义?br />Eclipse中的查找是不能设|单行或者多行的Q即DOT . 不包?\r \nQ所以\s代替Q?表示非贪婪,即碰到注释结?*/ 要停?br /><br /></strong></span><img src ="http://www.aygfsteel.com/lifesting/aggbug/369251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2012-02-02 17:25 <a href="http://www.aygfsteel.com/lifesting/archive/2012/02/02/369251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEFC֌捐献的一个图形旋?Rotation)的例?/title><link>http://www.aygfsteel.com/lifesting/archive/2009/02/20/255789.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 20 Feb 2009 03:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2009/02/20/255789.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/255789.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2009/02/20/255789.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/255789.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/255789.html</trackback:ping><description><![CDATA[     摘要: 实现GEF开发中的图形旋转的一个解x?nbsp; <a href='http://www.aygfsteel.com/lifesting/archive/2009/02/20/255789.html'>阅读全文</a><img src ="http://www.aygfsteel.com/lifesting/aggbug/255789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2009-02-20 11:04 <a href="http://www.aygfsteel.com/lifesting/archive/2009/02/20/255789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搞Eclipse开发的Fellow都来露一个脸吧,谢谢Q?/title><link>http://www.aygfsteel.com/lifesting/archive/2009/02/04/253227.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Wed, 04 Feb 2009 05:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2009/02/04/253227.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/253227.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2009/02/04/253227.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/253227.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/253227.html</trackback:ping><description><![CDATA[先说下我自己QDavid BY ChanQ?8岁,在北京,2002q正式接触计机E序Q?003q底开始自学Eclipse开发,目前在一家研I所做仿真。基杂实QؓZ调,乐于助hQEclipse Newsgroup上的David BY Chan是我,呵呵Q在上面见C国h。我擅长的方面有主要有Workbench UI, EMF, GEF/GMF, Debugger(Not Debugging)Q对JDT/CDT/DTP/WTP也略有了解,感觉Eclipse太庞大了Q经常碰C些问题要调试很久。很惌识一些做Eclipse开发的Q大家在交流的同Ӟ累积的知识互充,共同q步?br /> <br /> 我的邮箱是: lifesting%gmail.com (replace % with @), msn id is step.in%hotmail.com<br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/lifesting/aggbug/253227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2009-02-04 13:10 <a href="http://www.aygfsteel.com/lifesting/archive/2009/02/04/253227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q真有一个Java AST Viewhttp://www.aygfsteel.com/lifesting/archive/2008/12/19/247415.htmlAlways BaNg.Always BaNg.Fri, 19 Dec 2008 15:36:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/12/19/247415.htmlhttp://www.aygfsteel.com/lifesting/comments/247415.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/12/19/247415.html#Feedback1http://www.aygfsteel.com/lifesting/comments/commentRss/247415.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/247415.html阅读全文

Always BaNg. 2008-12-19 23:36 发表评论
]]>
着手开始准备我的第一个项?/title><link>http://www.aygfsteel.com/lifesting/archive/2008/12/12/246041.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 12 Dec 2008 14:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2008/12/12/246041.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/246041.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2008/12/12/246041.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/246041.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/246041.html</trackback:ping><description><![CDATA[软g开发的一个态势是迅PMDA(模型驱动架构)渐露头脚Q火爆的RoR也只是MDA的初U模式,典型的比如代码合q和工具支持不够Q模型的概念不够清晰。国内应用比较广的普元也包含cMxQ只不过有些忽略掉了“E序?#8221;q个核心角色?br /> <br /> 我想要做的一个东西就是以模型Z心的开发方式,它被“隐藏”在Eclipse里面。比如日常我们做的企业开发大部分是以业务层BO为核心,然后向下延臛_储,向上有service/service control/page control/page之类Q那么通过一套可~程模板Q即Template DSL)+代码生成器就可以生成惌的各个层的代码了Q其本质上是一个UML囑Ş建模工具Q上面绑定模板,模板的编写提供类似JDT(提供在Eclipse~写/调试Java代码的插仉)的高?U错Q重构等Q代码生成过E可以被q行或者单步调试?br /> <br /> MDA在EclipseC֌的推动下Q日渐成熟,以EMF metamodel描述的UML2_强大Q在技术完全可行,德国的oawQ法国的acceleo都有成熟的应用?br /> <br /> 我做q个的想法就是帮E序员摆q重琐的比如javabean, html, configuration{?br /> <br /> 商业模式是使用免费+收费专业培训支持?br /> <br /> 有同仁在搞MDAcM的开发么Q欢q提出宝贉|见?br /> <br /> <strong>如果你是一个多层JavaEE的开发者,每天被spring, hibernate, jdbc, structs/jsf/xxx, html折磨Q最希望共帮你解决那些问题呢Q谢谢?/strong><br /> <br /> Update: Just do itQ先d试一把,做一个版本出来,谢谢x?br /> <img src ="http://www.aygfsteel.com/lifesting/aggbug/246041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2008-12-12 22:16 <a href="http://www.aygfsteel.com/lifesting/archive/2008/12/12/246041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF的几U编辑方?/title><link>http://www.aygfsteel.com/lifesting/archive/2008/12/10/245449.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Wed, 10 Dec 2008 03:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2008/12/10/245449.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/245449.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2008/12/10/245449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/245449.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/245449.html</trackback:ping><description><![CDATA[     摘要: Eclipse Modeling Framework (EMF)的三U编~方式?nbsp; <a href='http://www.aygfsteel.com/lifesting/archive/2008/12/10/245449.html'>阅读全文</a><img src ="http://www.aygfsteel.com/lifesting/aggbug/245449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2008-12-10 11:36 <a href="http://www.aygfsteel.com/lifesting/archive/2008/12/10/245449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GMF中用动态模?dynamic templates)http://www.aygfsteel.com/lifesting/archive/2008/12/08/245016.htmlAlways BaNg.Always BaNg.Mon, 08 Dec 2008 05:54:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/12/08/245016.htmlhttp://www.aygfsteel.com/lifesting/comments/245016.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/12/08/245016.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/245016.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/245016.html阅读全文

Always BaNg. 2008-12-08 13:54 发表评论
]]>
插g开发之QCommon Navigator View (CNV) 通用D试图http://www.aygfsteel.com/lifesting/archive/2008/11/30/242634.htmlAlways BaNg.Always BaNg.Sat, 29 Nov 2008 17:28:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/11/30/242634.htmlhttp://www.aygfsteel.com/lifesting/comments/242634.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/11/30/242634.html#Feedback1http://www.aygfsteel.com/lifesting/comments/commentRss/242634.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/242634.html阅读全文

Always BaNg. 2008-11-30 01:28 发表评论
]]>
plugin.properties不管用,插g中L出现%xxx字符http://www.aygfsteel.com/lifesting/archive/2008/11/26/242890.htmlAlways BaNg.Always BaNg.Wed, 26 Nov 2008 14:20:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/11/26/242890.htmlhttp://www.aygfsteel.com/lifesting/comments/242890.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/11/26/242890.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/242890.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/242890.html阅读全文

Always BaNg. 2008-11-26 22:20 发表评论
]]>
插g开? View里面的对象托拽到Editor步骤http://www.aygfsteel.com/lifesting/archive/2008/11/22/241723.htmlAlways BaNg.Always BaNg.Fri, 21 Nov 2008 17:27:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/11/22/241723.htmlhttp://www.aygfsteel.com/lifesting/comments/241723.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/11/22/241723.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/241723.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/241723.html阅读全文

Always BaNg. 2008-11-22 01:27 发表评论
]]>
Ubuntu下GTK+开发环境设|?/title><link>http://www.aygfsteel.com/lifesting/archive/2008/11/17/240884.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Sun, 16 Nov 2008 16:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2008/11/17/240884.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/240884.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2008/11/17/240884.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/240884.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/240884.html</trackback:ping><description><![CDATA[Z搞清linux下SWT与GTK+的映机Ӟd老笔记本装了个UbuntuQ配|GTK+开发环境还是比较简单的?br /> <br /> <ol> <li>安装必须要的东西</li> <ol> <li>安装JDKQ用命令:<span style="color: red;">sudo apt-get install sun-java6-sdk</span></li> <li>安装eclipse+CDT 5.0Q我觉得CDT?开始渐成气候了Q作Z个eclipse开发者,我觉得他比kdevelop好用:)Q遗憄是在win下不支持msvcQ只能通过mingw或cygwin</li> <li>安装gnome和gtk+开发库Q用命令:<span style="color: red;">sudo apt-get install libgtk2.0-dev libgnome2-dev</span> ,安装之后Q所有相关的头文件和静态/动态库文g已经准备好了Q不得不说apt-get真NB?/li> </ol> <li>试一?/li> <ol> <li>头文件用命?<span style="color: red;">pkg-config --cflags gtk+-2.0</span>Q正常情况下会出C下结果:<br /> -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1</li> <li>库文件用命?<span style="color: red;">pkg-config --libs gtk+-2.0</span>Q正常情况下会出C下结果:<br /> -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 <br /> </li> </ol> <li>启动EclipseQ新Z个c projectQ然后右键单?properties->c/c++ build->SettingsQ在Tool Setting中将lGCC讄头文件目录以及链接库(q有一U做法是自定义make fileQ里面调用pkg-configQ因为没有显式设|,cdt无法做静态分析,不能利用它的强大功能Q比如烦引,重构{)?/li> <ol> <li>讄头文Ӟ点击GCC C CompilerQ?gt;DirectoriesQ然后用命?<span style="color: red;">pkg-config --cflags gtk+-2.0 | sed 's/ /\n/g' > include.txt</span>Q然后用命?<span style="color: red;">sed 's/-I//g' include.txt</span>Q依ơ将出现的每一行add到inclue path里面厅R?/li> <li>讄库,点击GCC C Linker->LibrariesQ然后如头文件操作一样用命?span style="color: red;">pkg-config --libs gtk+-2.0 | sed 's/ /\n/g' > lib.txt</span>Q然后用命?<span style="color: red;">sed 's/-l//g' lib.txt</span>Q依ơ将出现的每一行添加到libraries里?br /> </li> </ol> <li>~写一个包含GTK+试代码的C文gQ添加到目里面Q内容如下:<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><br /> <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: rgb(0, 0, 0);">#include </span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);">gtk</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">gtk.h</span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);"><br /> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> destroy(GtkWidget</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">, gpointer);<br /> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> gboolean delete_event(GtkWidget</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">, GdkEvent</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">, gpointer);<br /> </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> main(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> argc, </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">argv[]) {<br />     GtkWidget </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">window, </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">label;<br />     gtk_init(</span><span style="color: rgb(0, 0, 0);">&</span><span style="color: rgb(0, 0, 0);">argc, </span><span style="color: rgb(0, 0, 0);">&</span><span style="color: rgb(0, 0, 0);">argv);<br />     window </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> gtk_window_new(GTK_WINDOW_TOPLEVEL);<br />     gtk_window_set_title(GTK_WINDOW (window), </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello World!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />     gtk_container_set_border_width(GTK_CONTAINER (window), </span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">);<br />     gtk_widget_set_size_request(window, </span><span style="color: rgb(0, 0, 0);">200</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">);<br />     </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> Connect the main window to the destroy and delete-event signals. </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />     g_signal_connect(G_OBJECT(window), </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">destroy</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, G_CALLBACK(destroy), NULL);<br />     g_signal_connect(G_OBJECT(window), </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">delete_event</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />             G_CALLBACK(delete_event), NULL);<br />     </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> Create a new GtkLabel widget that is selectable. </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />     label </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> gtk_label_new(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello World</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />     gtk_label_set_selectable(GTK_LABEL (label), TRUE);<br />     </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> Add the label as a child widget of the window. </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />     gtk_container_add(GTK_CONTAINER (window), label);<br />     gtk_widget_show_all(window);<br />     gtk_main();<br />     </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /> }<br /> </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> Stop the GTK+ main loop function when the window is destroyed. </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> destroy(GtkWidget </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">window, gpointer data) {<br />     gtk_main_quit();<br /> }<br /> </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> Return FALSE to destroy the widget. By returning TRUE, you can cancel<br />  * a delete-event. This can be used to confirm quitting the application. </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> gboolean delete_event(GtkWidget </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">window, GdkEvent </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 255);">event</span><span style="color: rgb(0, 0, 0);">, gpointer data) {<br />     </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> FALSE;<br /> }<br /> </span></div> <br /> (以上代码来自图书 Foundation of GTK+ development)<br /> 然后q行Q正怼昑ּ如下Q?br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/gtk-code.png" width="872" height="538" /></li> </ol> Ubuntu真是个好东西Q耗的资源,囑ŞpȝE_Q对开发h员及其友好,真的很强大?br /> <br /> <img src ="http://www.aygfsteel.com/lifesting/aggbug/240884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2008-11-17 00:28 <a href="http://www.aygfsteel.com/lifesting/archive/2008/11/17/240884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse Job的属?/title><link>http://www.aygfsteel.com/lifesting/archive/2008/09/01/226072.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Mon, 01 Sep 2008 09:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2008/09/01/226072.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/226072.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2008/09/01/226072.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/226072.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/226072.html</trackback:ping><description><![CDATA[文章来源Q?a >http://blog.eclipse-tips.com/2008/08/adding-iaction-to-job.html</a><br /> <br /> 关于Job不说了,无所不在Q我要讲的是job的一些属性?br /> <br /> 1 lJob加上ActionQ当用户在Jobq行的时候点LQ可昄更具体的job描述或者对job本nq行操作?br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">Job job </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Job(</span><span style="color: #000000;">"</span><span style="color: #000000;">My Job</span><span style="color: #000000;">"</span><span style="color: #000000;">) {<br />     @Override<br />     </span><span style="color: #0000ff;">protected</span><span style="color: #000000;"> IStatus run(IProgressMonitor monitor) {<br />         monitor.beginTask(</span><span style="color: #000000;">"</span><span style="color: #000000;">My job is working<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">100</span><span style="color: #000000;">);<br />         </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;"><</span><span style="color: #000000;"> </span><span style="color: #000000;">100</span><span style="color: #000000;">; i</span><span style="color: #000000;">++</span><span style="color: #000000;">) {<br />             </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {<br />                 Thread.sleep(</span><span style="color: #000000;">200</span><span style="color: #000000;">);<br />             } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (InterruptedException e) {} </span><span style="color: #008000;">//</span><span style="color: #008000;"> ignore</span><span style="color: #008000;"><br /> </span><span style="color: #000000;">            monitor.worked(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br />         }<br />         monitor.done();<br />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Status(IStatus.OK, Activator.PLUGIN_ID, </span><span style="color: #000000;">"ok, </span><span style="color: #000000;">job finished!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />     }<br /> <br /> };<br /> job.setProperty(IProgressConstants.ACTION_PROPERTY, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Action() {<br />     @Override<br />     </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> run() {<br />         MessageDialog.openInformation(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Shell(), </span><span style="color: #000000;">"</span><span style="color: #000000;">Job Status</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">Some partial results processed can be displayed here</span><span style="color: #000000;">"</span><span style="color: #000000;">);   <br />         }<br />     });<br /> job.schedule();<br /> </span></div> <br /> 效果图:<br /> <br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/jobaction1.JPG" width="754" height="541" /><br /> <br /> 2 在Progress View里面保留记录<br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">job.setProperty(IProgressConstants.KEEP_PROPERTY, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">); <br /> </span></div> <br /> 效果图:<br /> <br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/jobhistory.JPG" width="760" height="207" /><br /> <br /> 3 防止error dialog打断你的操作。process view里面q行的job如果q回的status是errorQ那么默认它会弹Z个error dialog警告job有错误,如果jobq行的同时你在干别的Q这可能会打断你的某个操?Eclispe的dialog都是modal??br /> <br /> 把job的返回状态改为error?br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Status(IStatus.ERROR, Activator.PLUGIN_ID, </span><span style="color: #000000;">"</span><span style="color: #000000;">Job finished with ERRORS</span><span style="color: #000000;">"</span><span style="color: #000000;">);</span></div> <br /> error dialog:<br /> <br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/error_dialog.JPG" width="761" height="548" /><br /> <br /> 加上属性屏蔽error dialog:<br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">job.setProperty(IProgressConstants.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);</span></div> <br /> 4 lJob加一个图标:<br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">job.setProperty(IProgressConstants.ICON_PROPERTY, Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, </span><span style="color: #000000;">"</span><span style="color: #000000;">icons/sample.gif</span><span style="color: #000000;">"</span><span style="color: #000000;">));</span></div> <br /> 效果如下Q?br /> <br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/job_icon.JPG" width="760" height="207" /><br /> <br /> <img src ="http://www.aygfsteel.com/lifesting/aggbug/226072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2008-09-01 17:45 <a href="http://www.aygfsteel.com/lifesting/archive/2008/09/01/226072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>或许有用的特?Eclipse 3.4 Templates Viewhttp://www.aygfsteel.com/lifesting/archive/2008/08/29/225665.htmlAlways BaNg.Always BaNg.Fri, 29 Aug 2008 15:20:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/08/29/225665.htmlhttp://www.aygfsteel.com/lifesting/comments/225665.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/08/29/225665.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/225665.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/225665.html


看得出来它是在JDT UI里面定义的,l合了jdt text editor template ?Java开头的category 和custom editor template如SWT开头的category。对于我来说QSWT/Draw2d/Plugin的大量重复性代码就可以通过q个来完成了。将模板的代码插入到~辑器有两种ҎQ一U是直接拖拽到编辑器中,另一U是输入写入?execute"Q按Contxt Assist快捷?一般ؓCtrl+Space)?br />
除此之外QTemplates Viewq可以维护template比如add/remove。Template的gXML字串存放?metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.ui.prefs文g的org.eclipse.jdt.ui.text.custom_templates?br /> 起初我以为Template View好像q没有提供什么NB功能Q在Window->Preferences->Java->-Editor->Templates可以做同L事情Q但E微看了一下代码,发现我错了:

Templates View是PageBookViewQ意味着它跟Properties View/Outline View一P可以Ҏ不同的Editor来显CZ同的PageQ比如上图JDT是JavaTemplatesPageQ如果编写一个DSL Editor需要用到Templates ViewQ承AbstractTemplatesPageQ然后在Editor的getAapter()q回pageQ看Java EditorCZQ?br />
public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilingListener {

    
public Object getAdapter(Class required) {
        
if (SmartBackspaceManager.class.equals(required)) {
            
if (getSourceViewer() instanceof JavaSourceViewer) {
                
return ((JavaSourceViewer) getSourceViewer()).getBackspaceManager();
            }

        }


        
if (ITemplatesPage.class.equals(required)) {
            
if (fTemplatesPage == null)
                fTemplatesPage
= createTemplatesPage();
            
return fTemplatesPage;
        }


        
return super.getAdapter(required);

    
protected JavaTemplatesPage createTemplatesPage() {
        
return new JavaTemplatesPage(this);
    }


}

当然Q大部分Z需要写editorQ我们可以在自己的插仉通过使用扩展Ҏorg.eclipse.ui.editors.templates扩展JDT TemplateQ比如我在GEF目里面加入了GEF TemplateQ这L写讨厌的EditPart/EditPolicy/Command可以少些好多代码?br />


W一张图片看到的swt template是在上图所C的default-swttemplates.xml里面定义好了的?br />
最后想告诉q大Eclipse爱好者的是QEclipse SDK写的代码真工_果然是协作的l晶Q整一个代码宝库,Ҏ不用?strong>代码大全?)?

Always BaNg. 2008-08-29 23:20 发表评论
]]>
GEF~辑器中定点action如paste{的解决办法http://www.aygfsteel.com/lifesting/archive/2008/08/20/223309.htmlAlways BaNg.Always BaNg.Wed, 20 Aug 2008 14:26:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/08/20/223309.htmlhttp://www.aygfsteel.com/lifesting/comments/223309.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/08/20/223309.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/223309.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/223309.html

即在GMF? DiagramAction也是取得是鼠标点击paste时的位置Q而不是之前右键单d现contxt menu的位|。这?strong>“定点”关键是在选择paste之前右键单击的位|已l被C了,q且对context menu中所有对位置敏感的action都有效,比如merge, duplicate{?br />
下面分三步完成:

1 定义一个接口,为所有位|敏感action提供位置信息

public interface ILocationWare {
    
void setLocation(int x,int y);
}

2 注册一个listener到GEF editor的context menuQ提供位|记忆,q个是关键?/strong>

public class LivingContextMenu extends ContextMenuProvider {

    
private LivingEditor editor;
    
private IMenuListener listener = new IMenuListener(){

        @Override
        
public void menuAboutToShow(IMenuManager manager) {
            Control canvas 
= getViewer().getControl();
            Point cursor_location 
= canvas.getDisplay().getCursorLocation();
            Point relative_canvas 
= canvas.toControl(cursor_location);
            setItemLocation(manager,relative_canvas);
        }

        
private void setItemLocation(IMenuManager manager, Point relative_canvas) {
            IContributionItem[] items 
= manager.getItems();
            
for (int i =0; i < items.length; i++)
            {
                IContributionItem item 
= items[i];
                
if (item instanceof ActionContributionItem)
                {
                    IAction host_action 
= ((ActionContributionItem)item).getAction();
                    
if (host_action instanceof ILocationWare)
                        ((ILocationWare)host_action).setLocation(relative_canvas.x, relative_canvas.y);
                    
                }
                
else if (item instanceof IMenuManager)
                {
                    setItemLocation((IMenuManager)item, relative_canvas);
                }
            }
        }
        
    };
    
public LivingContextMenu(LivingEditor lv) {
        
super((GraphicalViewer)lv.getAdapter(GraphicalViewer.class));
        editor 
= lv;
        addMenuListener(listener);
    }
    .
        .
        .
    @Override
    
public void dispose() {
        removeMenuListener(listener);
        
super.dispose();
    }

}
原理是右键单击后,context menu的listener已经C了鼠标在graphicalviewer control(一般ؓFigureCanvas)叛_位置Qƈ告知l所有context menu中对位置敏感的action?br />
3 对位|敏感的action实现ILocationWare接口Q比如paste?/strong>

public class PasteAction extends SelectionAction implements ILocationWare {
    
    
private Point location = new Point(10,10);
    
private boolean contextTrigged=false;
    
public PasteAction(LivingEditor part) {
        
super(part);
    }

    @Override
    
public void run() {
      
//some operations depend on location
    }
    
    @Override
    
public void setLocation(int x, int y) {
        location.setLocation(x, y);
        contextTrigged 
= true;
    }
    @Override
    
protected void init() {
        
super.init();
        setId(ActionFactory.PASTE.getId());
        ISharedImages workbench_images 
= PlatformUI.getWorkbench().getSharedImages();
        setImageDescriptor(workbench_images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
        setDisabledImageDescriptor(workbench_images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED));
    }
}

q种解决同样适用于GMF的DiagramAction?DiagramAction也是Action的子c?





Always BaNg. 2008-08-20 22:26 发表评论
]]>
关于GEF 3.4 PaletteGroup的小误会http://www.aygfsteel.com/lifesting/archive/2008/08/17/222636.htmlAlways BaNg.Always BaNg.Sun, 17 Aug 2008 14:40:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/08/17/222636.htmlhttp://www.aygfsteel.com/lifesting/comments/222636.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/08/17/222636.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/222636.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/222636.html
1 定义一个HackedGroupEditPart:

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.internal.ui.palette.editparts.GroupEditPart;
import org.eclipse.gef.palette.PaletteContainer;
import org.eclipse.jface.action.Separator;

public class HackedGroupEditPart extends GroupEditPart {

    
public HackedGroupEditPart(PaletteContainer group) {
        
super(group);
    }
    @Override
    
protected void refreshVisuals() {
        
super.refreshVisuals();
        Insets insets 
= getContentPane().getBorder().getInsets(getContentPane());
        getContentPane().setBorder(
new MarginBorder(insets){
            @Override
            
public void paint(IFigure figure, Graphics graphics, Insets insets) {
                Rectangle r 
= getPaintRectangle(figure, insets);
                r.height
--;
                graphics.setForegroundColor(ColorConstants.buttonDarker);
                graphics.drawLine(r.x, r.bottom(), r.right(), r.bottom());
            }
        });
    }
    
}

2 使用q个加了Ҏ的GroupEditPartQ在~辑器定义里面重?createPaletteViewerProvider ҎQ如下:

public class LivingEditor extends GraphicalEditorWithFlyoutPalette {
.
.
@Override
protected PaletteViewerProvider createPaletteViewerProvider() {
        
return new PaletteViewerProvider(getEditDomain())
        {
            @Override
            
public PaletteViewer createPaletteViewer(Composite parent) {
                
                
//add border for GroupEditPart
                final PaletteEditPartFactory pepf = new PaletteEditPartFactory()
                {
                    @Override
                    
protected EditPart createGroupEditPart(
                            EditPart parentEditPart, Object model) {
                        
return new HackedGroupEditPart((PaletteContainer)model);
                    }
                };
                PaletteViewer pViewer 
= new PaletteViewer(){
                    {
                        setEditPartFactory(pepf);
                    }
                };
                pViewer.createControl(parent);
                configurePaletteViewer(pViewer);
                hookPaletteViewer(pViewer);
                
return pViewer;
            }
        };
    }


}

我的Palette定义Q用了三个PaletteGroupQ但不改一下根本看不出?strong>group之间的分?/strong>Q?br />
public class PaletteProvider {

    
public static PaletteRoot provide(LivingEditor livingEditor) {
        PaletteRoot root 
= new PaletteRoot();
        createStandardTool(root);
        createConnectionTool(root);
        createModelTool(root);
        
return root;
    }

    
private static void createModelTool(PaletteRoot root) {
        PaletteGroup model_group 
= new PaletteGroup("model");
        CombinedTemplateCreationEntry person_entry 
= new CombinedTemplateCreationEntry("Person",
                
"Create a person",
                
new SimpleFactory(Person.class),
                Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
"icon/person16.png"),
                Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
"icon/person24.png")
                );
        model_group.add(person_entry);
        CombinedTemplateCreationEntry dog_entry 
= new CombinedTemplateCreationEntry("Dog",
                
"Create a dog",
                
new SimpleFactory(Dog.class),
                Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
"icon/dog16.gif"),
                Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
"icon/dog24.gif"));
        model_group.add(dog_entry);
        root.add(model_group);
    }

    
private static void createConnectionTool(PaletteRoot root) {
        ConnectionCreationToolEntry relation 
= new ConnectionCreationToolEntry("relation",
                
"relation between person and dog",
                
new SimpleFactory(Relation.class),
                Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
"icon/connection16.gif"),
                Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, 
"icon/connection24.gif")
                );
        PaletteGroup conn_group 
= new PaletteGroup("relations");
        conn_group.add(relation);
        root.add(conn_group);
        
    }

    
private static void createStandardTool(PaletteRoot root) {
        PaletteGroup std 
= new PaletteGroup("Standard");
        SelectionToolEntry selection 
= new SelectionToolEntry();
        std.add(selection);
        
        root.add(std);
    }

可以看一下修改后的对比:



不过q种Ҏ使用了internal APIQ不适应版本更新Q只适合救急。我已经报告了这?strong>误会
Q?.5应该不会有了?br />
如果你也有这个困扎ͼp试吧?br />




Always BaNg. 2008-08-17 22:40 发表评论
]]>通过一个小例子看怎样扩展SWThttp://www.aygfsteel.com/lifesting/archive/2008/07/24/217236.htmlAlways BaNg.Always BaNg.Thu, 24 Jul 2008 10:39:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/07/24/217236.htmlhttp://www.aygfsteel.com/lifesting/comments/217236.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/07/24/217236.html#Feedback1http://www.aygfsteel.com/lifesting/comments/commentRss/217236.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/217236.html
  • RCP界面要跟Office 2007/Vista一栗?
  • 我喜Ƣ上一VC版的水晶按钮?
  • 商业版控件支持?
  • 我的RCPE序要定时启动?
q些效果让RCP下的SWT来跟q_相关Q但矛盾的是SWT要跨q_Q提供的API只能是一个^衡?许补充Q更多特性依赖我们对SWTq行扩展。比较常见的是对SWT Win32 APIq行扩展Q因为Windows的图形特性太丰富了,不用白不用啊?br />
下面׃SWT win32 x86来演CZ下这个扩展过E。扩展很单,是在swt的窗口上加一个自定义pȝ菜单Q最l效果如下图Q?br />


首先要有SWT JNI源代码,在Eclipse plug-in目录下找到org.eclipse.swt.win32.win32.x86.source_3.X.X.vXXX.jar(xx为版本号)Q解压羃到c:\build\swt-jniQ解完后在会发现有一堆h和c文gQ其中比较重要的是os, gdip, xpcom,wgl,awtQ用途分别如下:
  • os: 主要的JNIQ用来创建控Ӟ事g处理{?
  • gdip: 与windows的dc交互Q提供swt的gcd功能?
  • xpcom: 供swt调用mozillapd览器如firefox{?
  • wgl: ?D相关Q一般都用不上?
  • awtQ在swt中调用awtQawt也是jni?
了解swt源代码之后,接下来ؓbuild swt做准备?br />
  • 安装vc6Q尝试过用高版本Q但不支持?
  • 安装platform SDK 2003 February版,下蝲地址  늅安装说明SDK解压~安装。不要尝试更新版本,不支持?
  • 安装jdkQ这个无所谓,1.4, 1.5, 1.6都可以?
  • 下蝲gecko-sdk(下蝲地址)Q请务必使用1.8Qswt目前不完全支?.9?

所以的工具都安装或解压之后Q在swt源代码目录下扑ֈbuild.batQ在:X86 label部分做如下配|,其中配置的目录视你的安装而定Q?br />

 1:X86
 2
 3IF x.%DEV_TOOLS%==x. set DEV_TOOLS=c:\PROGRA~1
 4call %DEV_TOOLS%\MICROS~2\vc98\bin\vcvars32.bat
 5IF x.%MSSDK%==x. set MSSDK=%DEV_TOOLS%\MICROS~3
 6call %MSSDK%\setenv /XP32 /RETAIL
 7IF x.%OUTPUT_DIR%==x. set OUTPUT_DIR=..\out
 8IF x.%JAVA_HOME%==x. set JAVA_HOME=%DEV_TOOLS%\Java\jdk1.6.0_06
 9IF x.%XULRUNNER_SDK%==x. set XULRUNNER_SDK=C:\gecko-sdk
10set XULRUNNER_MAKE=make_xulrunner
11IF x.%1==x.x86 shift
12GOTO MAKE


如果你和我一L用的是Sun的JDKQ且版本?.5?.6Q还M改一下和build.bat同目录的make_win32.mak文g?/p>

替换

AWT_LIBS   = "$(JAVA_HOME)\jre\bin\jawt.lib"

?/p>

AWT_LIBS   = "$(JAVA_HOME)\lib\jawt.lib"


一旦配|完成后Q就可以在命令行中运?build.bat x86 来build swt了,如果你的buildq程中出错,使用build x86 clean删除垃圾文gQ然后再查明原因。如果没有错误的话,目录下会生成5个dll文gQ分别是swt-awt-win32-XXXX.dll, swt-gdip-win32-XXXX.dll, swt-wgl-win32-XXXX.dll, swt-win32-XXXX.dll, swt-xulrunner-win32-XXXX.dllQ其中XXXX是视你的Eclipse版本而定?br />
要实现我们想要的效果Q还需针对SWT的消息处理程?WndProc) 扩展一下OSQ那是在就在主H口建立q程中候往pȝ菜单里面加一自定义项。在Win32中,H口建立的消息ؓWM_CREATE(gؓ1)。ؓ单v见,q里只是覆盖了SWT的默认消息处理程序,它通过os.c中的 OS_NATIVE(DefWindowProcW)Ҏ来实现的(?8以后的版本api都是unicodeQ所以只覆盖W版本)

改动之前Q?/p>

 1#ifndef NO_DefWindowProcW
 2JNIEXPORT jint JNICALL OS_NATIVE(DefWindowProcW)
 3    (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
 4{
 5    jint rc = 0;
 6    OS_NATIVE_ENTER(env, that, DefWindowProcW_FUNC);
 7    rc = (jint)DefWindowProcW((HWND)arg0, arg1, (WPARAM)arg2, (LPARAM)arg3);
 8    OS_NATIVE_EXIT(env, that, DefWindowProcW_FUNC);
 9    return rc;
10}

11#endif

改动之后Q?br />

 1#ifndef NO_DefWindowProcW
 2
 3#define ID_CUSTOM_MENU 32888
 4
 5const wchar_t* wcTitle=L"Hello";
 6const wchar_t* wcContent=L"World";
 7const wchar_t* wcName = L"Bang";
 8
 9LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
10{
11    int wmId, wmEvent;
12    HMENU hSysMenu;
13    switch (message)
14    {
15    case WM_CREATE:
16        hSysMenu = GetSystemMenu(hWnd,FALSE);
17        InsertMenuW(hSysMenu,1,MF_BYPOSITION | MF_STRING,ID_CUSTOM_MENU,wcName);
18        break;
19    case WM_DESTROY:
20        PostQuitMessage(0);
21        break;
22    case WM_SYSCOMMAND:
23        wmId = LOWORD(wParam);
24        if (wmId==ID_CUSTOM_MENU)
25            MessageBoxW(hWnd,wcTitle,wcContent,MB_OK);
26        else
27            return DefWindowProcW(hWnd, message, wParam, lParam);
28        break;
29    default:
30        return DefWindowProcW(hWnd, message, wParam, lParam);
31    }

32    return 0;
33}

34
35JNIEXPORT jint JNICALL OS_NATIVE(DefWindowProcW)
36    (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
37{
38    jint rc = 0;
39    OS_NATIVE_ENTER(env, that, DefWindowProcW_FUNC);
40    rc = (jint)MyWndProc((HWND)arg0, arg1, (WPARAM)arg2, (LPARAM)arg3);
41    OS_NATIVE_EXIT(env, that, DefWindowProcW_FUNC);
42    return rc;
43}

44
45#endif

改动的目的就是在pȝ菜单里面加了一个菜单项 "Bang"Q点d会出?#8220;Hello world” 对话框?br />
重新在swt源目录下q行build x86Q生成的swt是扩展以后的版本?br />
现在我们来测试一下效果,写一个如下所C的HelloWorld1.javaQ放到swt源目录下Q先q行javac HelloWorld1.javaQ再q行java HelloWorld1。不用担心classpath与library pathQbuild之后它们默认都在当前目录下?/p>

import org.eclipse.swt.widgets.*;

public class HelloWorld1 {

public static void main (String [] args) {
    Display display 
= new Display ();
    Shell shell 
= new HelloWorld1 ().open (display);
    
while (!shell.isDisposed ()) {
        
if (!display.readAndDispatch ()) display.sleep ();
    }

    display.dispose ();
}

    
public Shell open (Display display) {
    Shell shell 
= new Shell (display);
    shell.open ();
    
return shell;
}

}


在窗口标题栏单击右键Q点d现的Bang菜单会有如下效果图:



q个例子虽然单,但大致描qC扩展swt的过E,更复杂的扩展{待YOU来实玎ͼ

 



Always BaNg. 2008-07-24 18:39 发表评论
]]>
或许你不知道的一个调试功?/title><link>http://www.aygfsteel.com/lifesting/archive/2008/07/22/216735.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Tue, 22 Jul 2008 15:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/lifesting/archive/2008/07/22/216735.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/216735.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2008/07/22/216735.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/216735.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/216735.html</trackback:ping><description><![CDATA[调试其实是门很深的学问,在分析Eclipse源代码的q程中积累了很多l验Q但大多与多Ch无用Q现介绍一个简单而非常有用的调试功能及它的适用场合?br /> <br /> 首先看一D代码:<br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"> 1</span> <span style="color: #000000;"><br /> </span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Simple {<br /> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {<br /> </span><span style="color: #008080;"> 4</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> max </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">10</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;"><</span><span style="color: #000000;"> max ; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br /> </span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        {<br /> </span><span style="color: #008080;"> 7</span> <span style="color: #000000;">            simpleAction(i);<br /> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">10</span> <span style="color: #000000;">    <br /> </span><span style="color: #008080;">11</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> simpleAction(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i) {<br /> </span><span style="color: #008080;">12</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> tmp </span><span style="color: #000000;">=</span><span style="color: #000000;"> i;<br /> </span><span style="color: #008080;">13</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (i </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">5</span><span style="color: #000000;">)<br /> </span><span style="color: #008080;">14</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">throw</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> NullPointerException(</span><span style="color: #000000;">"</span><span style="color: #000000;">5 is invalid number!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">15</span> <span style="color: #000000;">        System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Number </span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">tmp</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;"> reached!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">16</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">17</span> <span style="color: #000000;">}<br /> </span><span style="color: #008080;">18</span> <span style="color: #000000;"><br /> q段代码非常单,是打印10个数字,但中间一个出了异常,假设我们忘记Eclipse的Exception BreakPoint(在复杂的场合Q不一定抛Exception)Q于是看到控制台除了异常信息之后Q我们可在第7行和W?2行设|断点,看调用i到底发生了什么?br /> <br /> 启动调试后一切正常,除了你必F8 4ơ,因ؓ0-4正常Q但也在断点处,很烦人。有没有可能ȀzL点一ơ呢Q当然可以?br /> <br /> 从控制台看到5 is invalid numberQ那么这ơ调试只针对5Q我们可以简单的讄一下:<br /> <br /> W一步:<br /> <br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/setproperties.JPG" width="400" height="336" /><br /> <br /> W二步在出现的对话框内,选中Enable ConditionQ接着输入我们的condition: i==5<br /> <br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/lifesting/inputcondition.JPG" width="626" height="539" /><br /> <br /> OKQ再调试启动SimpleQ发现断ҎzL在i=5的时候,我们可以F6一步一步看到底发生了什么?br /> <br /> q种条g调试在用复杂的框架的时候极其有用,举个例子Q?br /> GMF的AbstractActionHandler有N多子c,你必ȝ接或间接的承它Q同时用它的APIQ在它的API很复杂而我q在探烦</span><span style="color: #000000;">的情况下</span><span style="color: #000000;">Q出错在所隑օQ出错后在AbstractActionHandler的某个API里设|了一断点Q但<span style="color: red;">你只惛_心自己写的子c?/span>Q否?/span><span style="color: #000000;">?/span><span style="color: #000000;">按F8过1分钟Q那么我们可以在上面的condition text里面输入Q?br /> <br /> <strong><span style="font-size: 14pt;"><span style="font-size: 12pt;">this.getClass().getName().equals("foo.bar.MyDiagramAction")</span></span></strong><br /> <br /> 可以省掉很多麻烦?br /> <br /> 当然condition可以写的很复杂,可以针对断点的context写Q意Java代码?br /> <br /> </span></div> <br /> <br /> <img src ="http://www.aygfsteel.com/lifesting/aggbug/216735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2008-07-22 23:10 <a href="http://www.aygfsteel.com/lifesting/archive/2008/07/22/216735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>因ؓEclipse包结构改动带来的RCP启动p|?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/lifesting/archive/2008/05/30/204061.html</guid><wfw:comment>http://www.aygfsteel.com/lifesting/comments/204061.html</wfw:comment><comments>http://www.aygfsteel.com/lifesting/archive/2008/05/30/204061.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lifesting/comments/commentRss/204061.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lifesting/services/trackbacks/204061.html</trackback:ping><description><![CDATA[最q要原来的RCP 3.2的项目从GEF改ؓGMF 2Q只能用Eclipse 3.3来开发,当我把在3.2下运行很好的目倒入?.3启动的时候报告一个很奇怪的错误Q?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 />     at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242)<br />     at org.eclipse.equinox.internal.app.EclipseAppContainer.start(EclipseAppContainer.java:98)<br />     at org.eclipse.equinox.internal.app.Activator.addingService(Activator.java:112)<br />     at org.osgi.util.tracker.ServiceTracker$Tracked.trackAdding(ServiceTracker.java:1064)<br />     at org.osgi.util.tracker.ServiceTracker$Tracked.trackInitialServices(ServiceTracker.java:926)<br />     at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:330)<br />     at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:274)<br />     at org.eclipse.equinox.internal.app.Activator.start(Activator.java:54)<br />     at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)<br />     at java.security.AccessController.doPrivileged(Native Method)<br />     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)<br />     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)<br />     at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)<br />     at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260)<br />     at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400)<br />     at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111)<br />     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:417)<br />     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189)<br />     at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:340)<br />     at org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:37)<br />     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:405)<br />     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:369)<br />     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:357)<br />     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)<br />     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)<br />     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)<br />     at org.eclipse.core.internal.runtime.PlatformActivator.startAppContainer(PlatformActivator.java:47)<br />     at org.eclipse.core.internal.runtime.PlatformActivator.start(PlatformActivator.java:32)<br /> ....<br /> <br /> U色字体表示workbenchq个applicationq没有加载到RCP runtime中来QPlugin registry里面没有注册信息Q在3.2?extension org.eclipse.ui.ide.workbench是申明在插gorg.eclipse.ui.ide中的Q通过Plugin Registry SearchQ发现在3.3中,q个extension declaration被挪到插件org.eclipse.ui.ide.application中了Q于?strong><span style="color: red;">在项目的product配置中加入org.eclipse.ui.ide.applicationq个插g依赖Q然后选中q个插gQ点?Add Required Plug-ins"</span></strong>Q再clear, 启动Q运行正常?br /> <br /> 从这个o人恼火的改动来看QEclipse在逐渐向它的两个趋势之一靠拢Q即成ؓ产品开发^?RCP)?另外一个是向OSGi标准看齐)<br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/lifesting/aggbug/204061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lifesting/" target="_blank">Always BaNg.</a> 2008-05-30 13:08 <a href="http://www.aygfsteel.com/lifesting/archive/2008/05/30/204061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse文g转码插ghttp://www.aygfsteel.com/lifesting/archive/2008/04/11/192250.htmlAlways BaNg.Always BaNg.Fri, 11 Apr 2008 10:54:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/04/11/192250.htmlhttp://www.aygfsteel.com/lifesting/comments/192250.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/04/11/192250.html#Feedback22http://www.aygfsteel.com/lifesting/comments/commentRss/192250.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/192250.html插g源代码下?/a> (导入插g在workspace中,右键export->Plug-in Development->Deployable plug-ins and fragmentsQ然后生成插件binar文g)
二进制包下蝲   Q?span style="color: #ff0000">因ؓblogjava不许上传jar文gQ请下蝲后将zip后缀改ؓjar后缀然后拯到eclipse/plugins目录)


一般在使用Eclipseq程中会有两U跟文g~码(charset)有关的情况让我们不愉快?br />
1 导入一个项目?/strong>
  假设你的同事做好了一个项目,Z更好的支持国际化Q里面的jsp面都采用UTF-8Q然后发l你Q你导入到Eclipse的workspace中,一般情况下Q在Eclipse中,q些jsp都变成了GBK~码Q你双击打开Q一堆ؕ码。假设你知道原因Q稍微如下设|一下可以解决问题:


(? 讄文g~码)
但是Q这个项目可能包?000个jsp文gQ且你还可能反反复复到q个问题Q真是一个体力活?br />
2 改变一个项目文件的~码
q种情况发生比较,但发生了是一个大N。比如公司有两个团队Q一个开发的目jsp采用UTF-8~码Q另外一个采用GBK~码。一D|间之后,需要整合两个项目,jsp面只能采用一U编码,UTF-8/GBK或其它。有l验的h知道q是一?strong>拯/讄~码/_脓
的过E:
 2.1 某个jsp的内容全部拷贝下来?br />  2.2 如图1所C将~码讄为统一~码如UTF-8?br />  2.3 把设|过~码的jsp文g清空Q然后粘贴?br />  好像解决问题很完,但是Eclipse没有宏,如果文g很多Q比?000个,是一个恐怖的d?br />
因ؓq两个问题老是反复的困扰着我的同事Q相信也困扰了不Java开发者,Eclipse转码插g很好很方便的解决了这个问题,它基于Eclipse 3.3开发,所以编译环境最好采用Eclipse 3.3?br />
下面是用步?br />
step1. 插件com.lifesting.tool.encoding_1.0.0.jar拯到eclipse/plugins目录下,重启Eclipse?br />
step2. 选择某个目Q右键选择propertiesQ然后点击Convert Settingq行转码规则讄Q如下图Q?br />

(? 目转码规则讄)
q个表格有四列,分别?strong>文g后缀
Q?strong>文g目前~码Q?strong>转换后的~码Q?strong>是否转换文g内容Q?/strong>如果转换文g内容Q那么对应的是前面所说的W二U情况,不{换文件内容对应的是第一U情c比如图2的{码规则就?span style="color: #0000ff">寚w目的jsp文gQ不原来是什么编码,l一转ؓUTF-8~码Qƈ且同时{换文件内?/span>。可以点d边的Add /Remove按钮来增?删除规则。最后点击Apply来保存设|?br />
step3. 转码
 在设|了转码规的目上,右键选择目Q某几个文gҎ某几个文?当然一个也可以)Q然后点击Lifesting Tools->Set Encoding。插件将完成转码工作。如果我们选择的是目Q将转换整个目Q如果选择的是文g夹,转换文g夹下所有满则的文gQ如果选择的是文gQ只转换文g?br />
(? 转码)
除了q方式外Q我们还可以利用Eclipse的文件搜索功能,搜到的文gq行转码Q如下图Q?br />
(? 在search view里{?
如上图所C,我们搜到了整个workspace的jsp文gQ然后点ȝ色E图标,插g会把所有满结果的文g转码Q每个文件的转换规则依赖它所属项目的转码规则讄?br />


Always BaNg. 2008-04-11 18:54 发表评论
]]>当Maven遇上MyEclipsehttp://www.aygfsteel.com/lifesting/archive/2008/04/02/190367.htmlAlways BaNg.Always BaNg.Wed, 02 Apr 2008 06:32:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/04/02/190367.htmlhttp://www.aygfsteel.com/lifesting/comments/190367.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/04/02/190367.html#Feedback0http://www.aygfsteel.com/lifesting/comments/commentRss/190367.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/190367.html Maven有自q一套约定目录规则,与MyEclipse的有冲突Q其实结合也很简单,因ؓMyEclipse的目录可配置?br />
1 用maven创徏一个web project
 mvn archetype:create   -DgroupId=com.lifesting  -DartifactId=test  -DarchetypeArtifactId=maven-archetype-webapp

2 补全某些目录
 cd test\src
 mkdir main\java
 mkdir test\resources
 mkdir test\java

3 修改pom文gQ在生成eclipse目的时候maven eclipse plugin使用此配|?br />   在project/build下面插入
<plugins> 
    
<plugin> 
      
<groupId>org.apache.maven.plugins</groupId> 
      
<artifactId>maven-eclipse-plugin</artifactId> 
      
<configuration> 
         
<projectnatures> 
            
<java.lang.String>com.genuitec.eclipse.j2eedt.core.webnature</java.lang.String> 
            
<java.lang.String>org.eclipse.jdt.core.javanature</java.lang.String> 
          
</projectnatures> 
          
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory> 
      
</configuration> 
    
</plugin> 
  
</plugins> 
project nature是eclipse开发中一个概念,比如加入javanaturepC此目是一个java projectQ会l定一个java builder用来~译java文gQ而webnature告诉MyEclipseq是一个MyEclipse web目Q更多MyEclipse projectNatureQ?br /> webservice-- com.genuitec.eclipse.ws.xfire.wsnature
facelet-- com.genuitec.eclipse.jsf.faceletsnature
jsf--com.genuitec.eclipse.jsf.jsfnature
struts--com.genuitec.eclipse.cross.easystruts.eclipse.easystrutsnature
或者在插g里面使用q个ҎQ?br />
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("test");
        
try {
            String[] natures 
= project.getDescription().getNatureIds();
            
for (String nature :natures)
                System.out.println(nature);
        }
 catch (CoreException e) {
            e.printStackTrace();
        }
可以项目所有的nature打印出来

outputDirectory主要是告诉maven eclipse plugin~译输出在什么位|,默认在target/classes下面Qweb目不同Q应该放在src/main/webapp/WEB-INF/classes 才能够被MyEclipse package到服务器?br />
4 在命令行test目录下运行mvn eclipse:eclipse生成Eclipse目?br />
5 在MyEclipse中将test project 导入到workspaceQMyEclipse通过projectNature识别到test是一个MyEclipse web projectQ它会在目目录下生成一?mymetadata文g。再关闭MyEclipseQ这么做的原因是因ؓ默认MyEclipse的webRoot不可配置?br />
6 修改MyEclipse下面?mymetadata文gQ比如我的test目文g内容?br />
<?xml version="1.0" encoding="UTF-8"?>
<project-module
  
type="WEB"
  name
="test"
  id
="myeclipse.1207117121765"
  j2ee-spec
="1.4"
  archive
="test.war">
  
<attributes>
    
<attribute name="webrootdir" value="/WebRoot" />
  
</attributes>
</project-module>
增加一行,修改一行ؓQ?br />
<?xml version="1.0" encoding="UTF-8"?>
<project-module
  
type="WEB"
  name
="test"
  id
="myeclipse.1207117121765"
  context-root
="/test""
  j2ee-spec
="1.4"
  archive
="test.war">
  
<attributes>
    
<attribute name="webrootdir" value="/src/main/webapp" />
  
</attributes>
</project-module>

可以看到Q增加的一?context-root="/test" 表示web的上下文为test.
修改的一行ؓwebrootdir的|?WebRoot改ؓmaven默认的web目source目录/src/main/webapp?br />
7 重新启动MyEclipseQ一切搞定了Q调试开发两不误?br />
参考资?br /> http://www.myeclipseide.com/PNphpBB2-viewtopic-t-17416.html


Always BaNg. 2008-04-02 14:32 发表评论
]]>
源代码才50K的eclipse中文properties~辑插gQ更?http://www.aygfsteel.com/lifesting/archive/2008/03/31/189772.htmlAlways BaNg.Always BaNg.Mon, 31 Mar 2008 06:10:00 GMThttp://www.aygfsteel.com/lifesting/archive/2008/03/31/189772.htmlhttp://www.aygfsteel.com/lifesting/comments/189772.htmlhttp://www.aygfsteel.com/lifesting/archive/2008/03/31/189772.html#Feedback14http://www.aygfsteel.com/lifesting/comments/commentRss/189772.htmlhttp://www.aygfsteel.com/lifesting/services/trackbacks/189772.html下蝲插g源代?/a>(eclipse 3.3)

下蝲eclipse 3.2 binary下蝲后改后缀zip为jarQ然后放到eclipse/plugins目录

eclipse内置一个properties editor但是只支持latin-1~码Q调用native2ascii太麻烦,sourceforge上有一个很强大的properties editorQ日本h搞得Q肯定支持中文了Q但是版本太老,3.1Q还有很多没有什么多大用处的swing, jbuild支持{,我稍微改了一下,做了一个最化的编辑器?br />
严正xQ?strong>此Y件属于研I性质Q版权属于原作者:http://propedit.sourceforge.jp/index_en.html

效果Q?br />


下蝲后将工程导入到workspace中,export成plugin卛_?br />



Always BaNg. 2008-03-31 14:10 发表评论
]]>
վ֩ģ壺 | | ղ| ʳ| | | ƽ| | е| Ͼ| ˲| Ӣɽ| Զ| ξ| ˶| | | | | | ƽɽ| | ˮ| ̨| | | | | | | ˼é| | ͨ| | | | ÷ӿ| | | | |