惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
S
Securelist
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
量子位
博客园 - Franky
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
T
Troy Hunt's Blog
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
小众软件
小众软件
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
L
Lohrmann on Cybersecurity
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
博客园_首页
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
D
DataBreaches.Net
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
T
Tenable Blog

博客园 - 刘刚

Google Map [导入]Editor中嵌入Editor [导入]GEF中修改默认的FeedBack [导入](接上篇)关于GEF Feedback的补充 [导入]GEF中导视图的使用 [导入]修改GEF中Connection的端点 [导入]Eclipse中Job API使用总结如下三 [导入]Eclipse中Job API使用总结如下二 [导入]Eclipse中Job API使用总结如下一 [导入]Eclipse调试框架的学习与理解二 [导入]Eclipse调试框架的学习与理解一 [导入]使用JET自动生成代码 [导入]定义自己的Common Navigator三 [导入]定义自己的Common Navigator二 [导入]定义自己的Common Navigator一 [导入]Eclipse运行(launcher)框架三 [导入]Eclipse运行(launcher)框架二 [导入]Eclipse属性页的支持 [导入]GEF理解系列九
[导入]Eclipse运行(launcher)框架一
刘刚 · 2008-01-02 · via 博客园 - 刘刚

网站: JavaEye  作者: liugang594  链接:http://liugang594.javaeye.com/blog/152332  发表时间: 2008年01月02日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

基础

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

  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

图三

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

本文的讨论也很精彩,浏览讨论>>

JavaEye推荐

文章来源:http://liugang594.javaeye.com/blog/152332