`
liugang594
  • 浏览: 978204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse运行(launcher)框架一

阅读更多

基础

 

首先我们需要明白两个概念:

 

  1. LaunchConfigurationType

字面上解就是一种运行类型。比如说java类型、Ant类型或者是C++类型。不同的类型就不同的运行方式。

  1. LaunchConfiguration

具体的某个要运行的对象的一个配置。比如说一个java类要运行就得知道类路劲、信赖库、Main类等;一个Eclipse插件要运行,就得配置有插件领事信息等等;或者是一个Ant文件,需要知道运行哪个Tast等。这些都是存在这个LaunchConfiguration里。

看下图就很好理解了:

 

tu1

图一

上图中,红色部分就是一个一个的LaunchConfigurationType,蓝色部分就是对应于某个LaunchConfigurationType的一个个的LaunchConfiguration。每一个LaunchConfiguration都会有几个Tab在右边,用来填写这些配置信息的。


每一个LaunchConfiguration都需要实现接口:org.eclipse.debug.core.ILaunchConfiguration。这个ILaunchConfiguration是一个“只读”的类。它本身不能够被修改。所以如果你想修改,你就必须引用到一个实现了org.eclipse.debug.core.ILaunchConfigurationWorkingCopy接口的对象,这个接口也实现了ILaunchConfiguration接口,但增加了一些用以修改config内容的方法。Config的内容通常是一个个的name/value对,这些name/value对被称为”attribute”。每个”attribute”的值只能是以下五种类型之一:

·    boolean

·    int

·    java.lang.String

·    java.util.List (all elements must be of type java.lang.String)

·    java.util.Map (all keys & values must be of type java.lang.String)

UI与非-UI的分离


Eclipse推荐把插件的UI部分与非-UI部分分离。我们可以看到所有自带的运行器都是UI分离的。所以我们实现的时候也应该这样做。

如果实现的是UI部分插件,你需要导入:org.eclipse.debug.ui

如果实现的是非-UI部分的插件,你需要导入:org.eclipse.debug.core


具体实现

下面我们就来做一个具体的实现。按照上面的说法,首先我们得有一个ConfigurationType。这是通过扩展实现的,所以我们需要定义一个扩展点实现:org.eclipse.debug.core.launchConfigurationTypes。这里我定义了一个如下:

   <extension

         point="org.eclipse.debug.core.launchConfigurationTypes">

      <launchConfigurationType

            delegate="com.tibco.cdc.liugang.launcher.delegate.LiugangLaunchConfigurationType"

            delegateDescription="This is for test"

            delegateName="Launcher Test"

            id="com.tibco.cdc.liugang.launcher.type"

            modes="run,debug"

            name="LiugangLauncher">

      </launchConfigurationType>

   </extension>


还有几项没有设置,可以先不管。这里把关键的几项指出:


1. delegate:这是最关键的。当我们选择了某个configuration后,点运行,调用的就是这个delegate实现类的launch方法。所以我们需要在launch方法里实现我们的运行方式。

2.  name:就是LaunchConfigurationType显示的名字,如上面的Eclipse Applicationjava Application等待。

3.  modes:运行模型。Eclipse好像已经默认实现了三种模型:rundebugprofile。一般如果只是运行就填run,要调试就填debug等等。


这样我们就定义了一个configurationType了。我们看一下运行效果:

tu2

图二

我们扩展的configurationType已经出来了。


如果我们提供了rundebug模型,那么我们在实现中就是分两种情况运行分别处理了。这个判断也就看launch方法中的mode参数。比较的时候不应该接直用String,还应该使用常量:org.eclipse.debug.core.ILaunchManager


下面我们再看一个delegatelaunch方法:

launch(ILaunchConfiguration configuration, String mode,

                  ILaunch launch, IProgressMonitor monitor)


       configuration一个具体的configuration,存储了要运行对象的配置信息。也可以在这个方法里做运行前的最后修改

       mode上面提到的,如rundebug

       launch:代表的就是一个运行。我们launch方法的职责就是把最终生成的target或者processes给加到launch对象上去。


实际上,Launch方法的最主要的职责就是两个:

1.    Construct a command line and pass it to Runtime.exec()

2.    Create debug targets/processes and add these to the ILaunch object

添加一个图标

上面运行结果中,我们的type前里没有图标。要增加一个图标也需要进行扩展。因为我们强调了UI分离的概念。所以一般来说需要再写一个UI插件,专门去存放UI相关的东西。具体的就不说了。

这里要扩展的扩展点是:org.eclipse.debug.ui.launchConfigurationTypeImages

记住要导入必要的插件。如下实现:

   <extension

         point="org.eclipse.debug.ui.launchConfigurationTypeImages">

      <launchConfigurationTypeImage

            configTypeID="com.tibco.cdc.liugang.launcher.type"

            icon="icons/sample.gif"

            id="com.tibco.cdc.liugang.launcher.ui.type.icon">

      </launchConfigurationTypeImage>

   </extension>

 

基本不用讲了,icon就是要显示的图标的路径;configTypeID就是这个图标要显示的对应的configType,就是上面我们扩展的那个typeID。运行结果如下:

tu3

图三

看我们的图标已经加上了。

分享到:
评论
1 楼 imu2008 2014-05-08  
此文是对的~写的可以~点32个赞

相关推荐

Global site tag (gtag.js) - Google Analytics