论坛首页 Java企业应用论坛

Eclipse 3.3携Europa正式发布了

浏览 45313 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-01  
刚刚逛了一圈论坛,竟然没人提到这么个消息,难道Eclipse真的没落啦?

Europa的事儿咱就不说了,之前有一位仁兄已经讲得很清楚了。今天上午到Eclipse主页上溜达了一下,发现3.3在昨天发布了,应该算是一个不小的新闻哦。记得前一阵子总有人说Eclipse发布的速度变慢了,跟不上NetBeans,看来这次发布算是小小地安抚了一下Eclipse的粉丝们啊。

主页上明显的一个变动是提供了针对不同类型开发者的不同版本的下载,而不再只是一味地SDK=Platform+JDT+PDE了,算是不错的改进。另外一个值得注意的地方是3.3版本默认加入了Mylyn这个东东。Mylyn就是以前的Mylar(我总觉得新名字没有老名字好),是做Task Focused Development的一个东东。具体来说就是可以把很多东西标记为task,然后从task的角度看整个project,这样整体感觉会清爽很多。Mylyn还支持与BugZilla,Trac还有JIRA的整合,你可以在Mylyn里面创建这些Issue Tracking System中的task,然后做做同步之类的,应该是很方便的。另外Subclipse也有一个支持Mylyn的版本。

由于最近本人关注Ruby比较多,因此特意看了一下DLTK。目前还是0.9版本,试用起来对Ruby的支持很不错,比当前的NetBeans要好。一个例子是:DLTK可以根据变量的类型做代码提示,而NetBeans目前是把所有的东西都提示出来(比如一个对Array变量也会提示出ActiveRecord的方法)。但可惜的是DLTK没有对Ruby on Rails的支持,所以目前还是NetBeans更全面一些。CodeGear在今年第3季度会推出基于DLTK的Ruby IDE,支持Ruby on Rails,而且号称会是best in the world,多少有些让人期待。但是很有可能这个东东是要钱的,哎~

有一个比较讽刺的地方,我想使用Eclipse作为Ruby on Rails的IDE,完全是为了Skept这个东东。如果可行,就可以在一个IDE里面得到对Ruby on Rails和ExtJS相当不错的支持了。但是问题在于,当前的Skept不能运行在Eclipse 3.3下,而DLTK非要使用Eclipse 3.3不可。Eclipse的兼容问题我老早就诟病过了,看来在今后的很长时间里还是不得不忍受下去啊。
   发表时间:2007-07-02  
早已关注,可JavaEye现在才由你发布,唉~
0 请登录后投票
   发表时间:2007-07-02  
早就关注了,倒计时时就开始关注了
0 请登录后投票
   发表时间:2007-07-02  
试了一下CodeGear的ruby IDE,目前比radrails好不到哪去...
0 请登录后投票
   发表时间:2007-07-02  
感觉3.3的速度提高了不少。启动和运行都有改善。界面也好看一些了。还有一个改变,eclipse现在访问网络是通过eclipse.exe进行的(我是从本地防火墙的提示上注意到的),不知道这个改进是否会意味着某些本地代码的性能优化。

我现在是在eclipse上的aptana平台上开发rails,aptana升级的速度还算可以,就是BUG多多,另外在使用上也不是很方便。不过也够用了。人性化的功能弱了,也有利于对底层知识的学习。

推荐升级到3.3。推荐指数:4星。
0 请登录后投票
   发表时间:2007-07-02  
启动速度快多了,不过很多插件没更新过来,还是不用了
0 请登录后投票
   发表时间:2007-07-02  
liuyifan.com 写道
试了一下CodeGear的ruby IDE,目前比radrails好不到哪去...

Where did you get this IDE from? I cannot find any download at CodeGear's home page.
0 请登录后投票
   发表时间:2007-07-02  
我的3.2运行运行启动太慢了,试一下3.3怎么样
0 请登录后投票
   发表时间:2007-07-02  
Mylar不错的.
从1.x开始用到现在了,结合Trac用很爽.

另外贴一个Eclipse3.3 Middle click to close的hack

Enjoy~~
--- CTabFolder.java.orig	2006-07-01 15:29:54.112926400 +0800
+++ CTabFolder.java	2006-07-01 16:08:18.256121600 +0800
@@ -1897,10 +1897,40 @@
         }
       }
       break;
     }
     case SWT.MouseDown: {
+      // ~~~ HACK START ~~~
+      // Redraw red *X* to show that the tab is going to be closed.
+      // - Shawn Chain(shyguy@tom.com)
+      if (event.button == 2) {
+        // Close the tab anyway
+        CTabItem item = null;
+        if (single) {
+          if (selectedIndex != -1) {
+            Rectangle bounds = items[selectedIndex].getBounds();
+            if (bounds.contains(x, y)) {
+              item = items[selectedIndex];
+            }
+          }
+        } else {
+          for (int i = 0; i < items.length; i++) {
+            Rectangle bounds = items[i].getBounds();
+            if (bounds.contains(x, y)) {
+              item = items[i];
+            }
+          }
+        }
+        if (item != null) {
+          item.closeImageState = SELECTED;
+          redraw(item.closeRect.x, item.closeRect.y, item.closeRect.width, item.closeRect.height, false);
+          update();
+          return;
+        }
+      }
+      // ~~~ HACK END ~~~
+      
       if (minRect.contains(x, y)) {
         if (event.button != 1) return;
         minImageState = SELECTED;
         redraw(minRect.x, minRect.y, minRect.width, minRect.height, false);
         update();
@@ -2019,10 +2049,17 @@
         }
       }
       break;
     }
     case SWT.MouseUp: {
+      // ~~~ HACK START ~~~
+      // Fire the event to close the selected tab 
+      if (event.button == 2) {
+        closeTab(event);
+      }
+      // ~~~ HACK END ~~~
+      
       if (event.button != 1) return;
       if (chevronRect.contains(x, y)) {
         boolean selected = chevronImageState == SELECTED;
         if (!selected) return;
         CTabFolderEvent e = new CTabFolderEvent(this);
@@ -2134,10 +2171,82 @@
         }
       }
     }
   }
 }
+
+/**
+ * Helper method to close the tab, extracted from the swt core code
+ * 
+ * @param event
+ * 
+ * @author Shawn Chain(shyguy@tom.com)
+ */
+private void closeTab(Event event) {
+  int x = event.x, y = event.y;
+  // Get tab item first
+  CTabItem item = null;
+  if (single) {
+    if (selectedIndex != -1) {
+      Rectangle bounds = items[selectedIndex].getBounds();
+      if (bounds.contains(x, y)) {
+        item = items[selectedIndex];
+      }
+    }
+  } else {
+    for (int i = 0; i < items.length; i++) {
+      Rectangle bounds = items[i].getBounds();
+      if (bounds.contains(x, y)) {
+        item = items[i];
+      }
+    }
+  }
+  if (item != null) {
+    boolean selected = item.closeImageState == SELECTED;
+    item.closeImageState = HOT;
+    redraw(item.closeRect.x, item.closeRect.y, item.closeRect.width, item.closeRect.height, false);
+    if (!selected)
+      return;
+    CTabFolderEvent e = new CTabFolderEvent(this);
+    e.widget = this;
+    e.time = event.time;
+    e.item = item;
+    e.doit = true;
+    for (int j = 0; j < folderListeners.length; j++) {
+      CTabFolder2Listener listener = folderListeners[j];
+      listener.close(e);
+    }
+    for (int j = 0; j < tabListeners.length; j++) {
+      CTabFolderListener listener = tabListeners[j];
+      listener.itemClosed(e);
+    }
+    if (e.doit) {
+      item.dispose();
+      Display display = getDisplay();
+      Point pt = display.getCursorLocation();
+      pt = display.map(null, this, pt.x, pt.y);
+      CTabItem nextItem = getItem(pt);
+      if (nextItem != null) {
+        if (nextItem.closeRect.contains(pt)) {
+          if (nextItem.closeImageState != SELECTED && nextItem.closeImageState != HOT) {
+            nextItem.closeImageState = HOT;
+            redraw(nextItem.closeRect.x, nextItem.closeRect.y, nextItem.closeRect.width, nextItem.closeRect.height,
+                false);
+          }
+        } else {
+          if (nextItem.closeImageState != NORMAL) {
+            nextItem.closeImageState = NORMAL;
+            redraw(nextItem.closeRect.x, nextItem.closeRect.y, nextItem.closeRect.width, nextItem.closeRect.height,
+                false);
+          }
+        }
+      }
+    }
+    return;
+  }
+}
+
 boolean onPageTraversal(Event event) {
   int count = items.length;
   if (count == 0) return false;
   int index = selectedIndex; 
   if (index  == -1) {
0 请登录后投票
   发表时间:2007-07-02  
界面做的不错,智能化了不少
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics