Eclipse插件开发流程

Eclipse插件开发流程

最近工作比较繁忙,都没有时间写技术博客了,最近工作中用gradle管理项目,每次更改了模块关系或者更新了SVN,都要重新gradle和重新刷新和编译,每次要做这些操作都要切换到工作空间的文件夹中执行bat脚本,所以为了节约时间,就开发了个插件在eclipse中一键操作就可以了,插件开发如下:

  开发流程

  1、在eclipse树目录下,单击右键New---->other---->Plug-in Project,填写project name,如gradlePlug,然后next

  2、ID,Version,Name默认即可,Vendor填写开发者名字,然后其他默认,next

  3、选择Hello,World,next

  4、java Package Name: 填写包名,跟类的包名一样,根据自己的需要填写,我这里填写的是com.sf.gradleplug,

         Action Class Name:这个插件按钮点击执行的类,根据自己需要填写,我填写的是GradleEclipseAction

         Message Box Text:当鼠标放在按钮上的提示信息,根据自己填写,我填写的是Gradle-eclipse,然后finish

  5、新建工程完成后,你可以看到一个Activator类,这个类你不用去管他,还有一个类是GradleEclipseAction,就是刚刚填写的,里面有一个run()方法,我们写代码主要就是在这里,写相关的操作。

  6、还有一个比较重要的xml文件,就是plugin.xml,我们要改的就是menu,action标签,menu就是eclipse在头上展现的菜单,我这里label填写的是Gradle,最后在eclipse头上会出现Gradle菜单

 7、action标签分析

   <action
               label="Gradle-eclipse"  //按钮的提示信息
               icon="icons/e.png"//按钮的图标
               class="com.sf.gradleplug.actions.GradleEclipseAction"//按钮执行的事件对应的类
               tooltip="Gradle-eclipse"//鼠标移动到按钮的提示信息
               menubarPath="sampleMenu/sampleGroup"//菜单组
               toolbarPath="sampleGroup"
               id="com.sf.gradleplug.actions.GradleEclipseAction">
         </action>


  如果有多个按钮,就写多个action标签。

开发中遇到的几个问题

 1、获取项目所在工作空间路径问题,网上看了很多是这么获取的,但我试了没有用,一直都是获得空,网上的代码如下:

public static IProject getCurrentProject() throws CoreException{    
        ISelectionService selectionService =     
            Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService();    
    
        ISelection selection = selectionService.getSelection();    
    
        IProject project = null; 
        
        if(selection instanceof IStructuredSelection) {    
            Object element = ((IStructuredSelection)selection).getFirstElement();    
            System.out.println(element.getClass().getName());
            if (element instanceof IResource) {    
                project= ((IResource)element).getProject();    
            } else if (element instanceof PackageFragmentRootContainer) {    
                IJavaProject jProject =     
                    ((PackageFragmentRootContainer)element).getJavaProject();    
                project = jProject.getProject();    
            } else if (element instanceof IJavaElement) {    
                IJavaProject jProject= ((IJavaElement)element).getJavaProject();    
                project = jProject.getProject();    
            }else{
           
            project = ((Project)element).getProject();
           
            //project = ((TreeSelecti;
            }
        }     
        return project;    
    }    


用以上代码需要org.eclipse.core.resources.jar和eclipse.jar两个jar包。最后我用Platform.getInstanceLocation().getURL().getPath();就可以获得到工作空间绝对路径

2、在插件开发中,有时点击插件的时候希望输出一些信息到console中,如果直接用System.out.print()是没有用的,需要自己调用Console,步骤如下:

    A、打开插件开发工具,即双击plugin.xml即可,选中Dependencies,然后点击add,搜索console,选中org.eclipse.ui.console即可,相当于把jar包加入

    B、编写代码,如下:

public class ConsoleFactory  {
private MessageConsole console = null;  
private MessageConsoleStream consoleStream = null;  
private IConsoleManager consoleManager = null;  
private final String CONSOLE_NAME = "Console";  

private  void initConsole() {  
        consoleManager = ConsolePlugin.getDefault().getConsoleManager();  
        IConsole[] consoles = consoleManager.getConsoles();  
        if(consoles.length > 0){  
            console = (MessageConsole)consoles[0];  
        } else{  
            console = new MessageConsole(CONSOLE_NAME, null);  
            consoleManager.addConsoles(new IConsole[] { console });  
        }  
        consoleStream = console.newMessageStream();  
   }  
/** 
* 开启console, 打印相关消息 
* @param message 消息内容 
*/  
public  void printMessage(String message) {  
   if (message != null) {  
       if (console == null) {  
           initConsole();  
       }  
       // 显示Console视图  
       consoleManager.showConsoleView(console);  
       // 打印消息  
       consoleStream.print(message + "\n");  
   
   }  
}  
}

直接调用printMessage即可

3、java 调用windows的bat文件遇到的一些问题。

     A、如何调用,调用代码如下:

Runtime rt = Runtime.getRuntime(); 
       Process p = null; 
  String cmd = "cmd.exe  /C start  D:\\workspace\\gradle-eclipse.bat";

p = rt.exec(cmd);

    其中,cmd.exe  /C start 是固定写法,D:\\workspace\\gradle-eclipse.bat是bat文件所在位置

  B、以上调用会弹出黑色的弹出框,如果不想弹出,并想把信息输出到Console中,需要在start后加上 /b,完整代码如下:



  Runtime rt = Runtime.getRuntime(); 
       Process p = null; 

    String cmd = "cmd.exe  /C start  \b  D:\\workspace\\gradle-eclipse.bat";
  try {
p = rt.exec(cmd);
InputStream in = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
p.getInputStream(), "GBK"));// 注意中文编码问题
String line;
ConsoleFactory console = new ConsoleFactory();
while ((line = br.readLine()) != null) {
console.printMessage(line);//输出到console
}
p.waitFor();
in.close();
} catch (Exception e) {
}

   C、还有一个比较坑的问题就是,如果你的bat文件又调用了其他的bat,而调用的时候用的是相对路径,这个时候调用会找不到这个bat文件,所以这个时候自己在写一个bat,然后先切换到执行的路径,然后在执行,切换路径bat命令为:cd /d  E:\\eclipse\\  bat所在的路径,然后在调用

  D、在调用bat的时候用start,并且bat文件最后要加上exit ,不能用call,用call会阻塞,程序不能自动关闭。
   


 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页