eclipse 插件开发--启动计时

eclipse 插件开发入门还算是比较简单的, 但是想要开发出比较实用的插件, 还是需要些时间去研究eclipse 插件相关的API的. 笔者的入门程序为记录eclipse 的启动时间.

1. eclipse 插件项目开发

1.1 新建项目: File -> New -> Plugin-in Project

1.2 输入ID 和 供应商名称Vendor

1.3 快速选择模板, 笔者选择自定义模板

1.4 选择模板, 笔者不选择任何模板

  • 可根据自己开发的功能进行选择模板

1.5 添加Console 包

  • 点击MANIFEST.MF文件, 选择Dependencies 选项卡, 点击Required Plug-ins 面板中的Add, 输入Console, 选择or.eclipse.ui.console

2. 相关文件:

2.1 计时类,需实现IStartup 接口

package org.zgf.eclipse.startup;

import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IStartup;
import org.zgf.eclipse.startup.util.ConsoleUtil;

/**
 * 显示Eclipse 启动时间
 * @ClassName: ShowTime.java
 * @author zonggf
 * @date 2017年7月18日-下午4:04:03
 */
public class ShowTime implements IStartup{

    @Override
    public void earlyStartup() {

        Display.getDefault().syncExec(new Runnable() {

            @Override
            public void run() {

                long start = Long.parseLong(System.getProperty("eclipse.startTime"));
                long cost = System.currentTimeMillis() - start;

                String tips = "Eclipse started cost: " + cost + " ms";

                ConsoleUtil.printLog(tips);

                //MessageDialog.openInformation(Display.getDefault().getActiveShell(), "Eclipse", tips);
            }
        });

    }

    public static void main(String[] args) {

        Map<String, String> env = System.getenv();
        Set<Entry<String, String>> entrySet = env.entrySet();
        for (Entry<String, String> entry : entrySet) {
            System.out.println(entry.getKey() + " -- " + entry.getValue());
        }


    }

}

2.2 工具类, 向Console 输出信息

package org.zgf.eclipse.startup.util;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;

/**
 * 控制台输出启动时间
 * @ClassName: ConsoleUtil.java
 * @author zonggf
 * @date 2017年7月18日-下午4:31:39
 */
public class ConsoleUtil {


    /**
     * @Description 获取控制台输出对象
     * @return 控制台输出流
     * @author zonggf
     * @date 2017年7月18日-下午4:27:14
     */
    private static MessageConsoleStream getMsgConsoleStream() {  
        IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();

        MessageConsole messageConsole;

        IConsole[] consoles = consoleManager.getConsoles();  
        if(consoles.length > 0){  
            messageConsole = (MessageConsole)consoles[0];  
        } else{  
            messageConsole = new MessageConsole("Console", null);  
            consoleManager.addConsoles(new IConsole[] { messageConsole });  
        }  
        consoleManager.showConsoleView(messageConsole);

        return messageConsole.newMessageStream();
    }  

    /**
     * @Description 向控制台输出一行字符串
     * @param line 字符串
     * @author zonggf
     * @date 2017年7月18日-下午4:27:43
     */
    public static void print(String line){
        MessageConsoleStream mcs = getMsgConsoleStream(); 
        mcs.print(line);
    }

    /**
     * @Description 向控制台输出日志
     * @param message 日志信息
     * @author zonggf
     * @date 2017年7月18日-下午4:35:49
     */
    public static void printLog(String line){
        MessageConsoleStream mcs = getMsgConsoleStream(); 

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String timeStr = sdf.format(new Date());

        mcs.print("[" + timeStr + "] " + line);
    }

    /**
     * @Description 关闭控制台输出流
     * @param mcs
     * @author zonggf
     * @date 2017年7月18日-下午4:28:03
     */
    public static void close(MessageConsoleStream mcs){
        try {
            mcs.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2.3 配置文件: plugins.xml, 需新建, 根路径下

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

   <extension
         point="org.eclipse.ui.startup">
         <startup class="org.zgf.eclipse.startup.ShowTime" />
   </extension>

</plugin>

2.4 MAINIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Timer
Bundle-SymbolicName: org.zgf.eclipse.startup;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: org.zgf.eclipse.startup.Activator
Bundle-Vendor: zongf
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 org.eclipse.ui.console;bundle-version="3.5.300"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy

3. 测试:

  • 点击MAINIFEST.MF overview 选项卡, 点击右测Launch an Eclipse application

4. 打包为插件jar包

4.1 点击MAINIFEST.MF overview 选项卡, 点击右上角按钮

4.2 选择目录

4.3 选择使用本地已经编译好的class 打包

4.4 将生成的jar包拷贝到eclipse的plugins 目录,重启即可

  • jar包在你选择的目录下的plugins 目录下

4.5 重启eclipse

  • 会发现控制台有以下输出
[2017-07-20 10:13:40] Eclipse started cost: 25730 ms

results matching ""

    No results matching ""