Eclipse零起步(转)(10~13)

来源:互联网 发布:商家怎样找淘宝客 编辑:程序博客网 时间:2024/06/06 14:08

Eclipse零起步(10)

(前言)
今天我们介绍一下pde, 如果让你自己写plugin.xml这个配置文件,估计也比较头疼,所以
啊,还是有工具的好,呵呵.

(正文)

[PDE 简介]

PDE 也是eclipse内置的一个插件, 英文名是Plug-in Development Environment, 是eci
lpse team为了帮助用户更好的

开发eclipse插件而开发的一个平台, 专门用来开发插件.
其实第七讲中,我们试过的一个hello world例子,能这么快生成, 编译,运行, 测试都是p
de的功劳.

PDE主要有一下几个功能:
1. 向导, 包括新建插件工程向导, 新建扩展(extension)向导, 生成扩展控制类向导等


2. 编辑, 主要是提供了一个对plugin.xml, 也包括(feature.xml, fragment.xml,
site.xml)的可视化编辑

3. 测试和部署, pde提供了一个running workbench, 可以用来运行测试插件, 还可以进
行单步调试等,而且等插件开发

好后还提供方便的部署插件的功能,能方便把你编辑的项目导出为一个可部署的插件

而以后要开发插件的同志, 那就要先好好研究一下这个东东了, 对它的掌握程度直接影
响到你开发插件的效率问题.

关于PDE的详细介绍,可参看eclipse联机帮助中的PDE Guide,有详细介绍

[PDE 配置]

用之前,一般都要做一个配置,就是设置一下目标平台, 因为这涉及到编译插件时的类路
径问题.

要设置在preference-> plugin development -> target platform中, enable 所有的插
件, 也就是点一下not in

workspace按钮,然后apply或直接ok. 这样编译插件的时候, pde会自动check你这个插件
项目的dependency,然后根据你

的dependency,为你设置正确的classpath路径.

如果你一个要被dependency的插件没有enable, 那pde就找不到这个插件,也就找不到这
个插件的运行库,也就无法设置

classpath了.

总之,开发插件前, 设置一下就ok了

[新建项目]

开发插件,其实不止plugin, 还有feature, site, fragment等等, 可以通过不同的向导
来生成你要的. 今天先介绍

plugin, 其他的以后说, 而且使用向导新建一个plugin已经介绍过了,这里就不多说了

[plugin.xml 编辑]
打开plugin.xml, 一个plug-in manifest editor就打开了, 它是一个多页编辑器, 分为
welcome, overview,

dependency, runtime extensions, extension points 和source 这几页.


welcome page: 是一个使用这个东东的简介, 如果你不熟悉,可以先看看这页, 它会教你
一些使用的步骤, 如果你不想以

后再看到这页, 那可以勾一下在这页里下面的一个选择框, 让这页下次不用显示.

overview page: 是对这个插件的一个概览, 这页可以修改的是这个插件的id,
name,version, provide name 和 class

对应的源代码是:
id="MyPlugin"
name="MyPlugin Plug-in"
version="1.0.0"
provider-name=""
class="MyPlugin.MyPluginPlugin">

dependency page: 这页就是设置当前插件需要依赖的插件有哪些,比如你开发一个hello
world中就要依赖org.eclipse.

ui这个插件, 因为我们使用到了对话框,菜单等等, 这些实现在ui这个插件里都有. 我们
就可以通过add这个按钮加入我

们需要dependency的插件.

而且由于eclipse各个插件版本丰富, 版本之间有时不能兼容, 所以我们有必要对我们要
依赖的插件做一些版本的需求.

我们点中我们依赖的插件的那个项,看页面右边有一个import detail, 可以设置version
to match,你可以填一个你对应

的那个版本. 而且对应规则你也可以自己设定有none, equal, compatible等等, 具体什
么意思可以参看pde guide

另外还有一个选项叫, re-export dependency, 选了这个后, 这样以后你开发的插件被
依赖时, 你设置的这个依赖插件

就可视化了, 挺难表达的,举例:
A --> B , B-->C
如果 A 依赖B ,B 依赖 C, 那A 不一定能依赖C , 除非 B 在依赖C时,同时re-export
dependency, 那A -> C, 就是这个

意思拉

对应的代码段:






runtime page: 这个页是设置运行库的, 默认情况下会有一个和插件同名的一个jar做运
行库, 点击这个默认的jar, 会

看见下面的library content 显示 src/ , 这个设置不会反映在plugin.xml中, 而是在
导出插件时有影响, 对这个更改

后的效果,反应在build.properties中

如果你这个插件有其他依赖的库, 那就要在这里设置, 要不虽然编译通过, 但是实际运
行时还是有问题的

另外运行库也要设置library exporting ,如果你的运行库对别的依赖这个插件的插件不
可视, 那就设置不要导出, 如果

依赖这个插件的插件要用到这个运行库,那就设置导出

对应的代码段:




extension page: 这个是设置插件的扩展, 这是很重要的一部分, 可以通过add来弹出添
加扩展的向导, eclipse中有很

多扩展, 有很多很实用的, 比如helloworld中就用到了actionsets和perspectiveextens
ions这两个扩展点, 以后我们还

会介绍别的扩展

对应的代码段:

point="org.eclipse.ui.actionSets">
label="Sample Action Set"
visible="true"
id="MyPlugin.actionSet">
...


point="org.eclipse.ui.perspectiveExtensions">
targetID="org.eclipse.ui.resourcePerspective">
...



extension point page: 你可以设置自己的扩展点, 让别的插件来扩展. 这部分有的好
介绍了, 以后再说,哈~

source page: 如果你实在熟的不得了, 也可以直接改源代码,呵呵

[运行插件]

PDE 提供了专门的 runtime workbench 供开发者方便的运行测试插件, 而不用部署之后
才能运行. 在菜单 run-> run

..., 然后new 一个 runtime workbench 配置,

arguments页面设置 workspace data , 这个设置运行的workbench的工作区存在哪儿
jres 设置运行这个运行时平台用的jre
program arguments 中可以设置nl,os,ws等参数, 如果想测试国际化插件, 可以在这里
改变nl,来测试

翻到plugin and fragment页: 默认的, 工作区里的所有插件都运行, 如果有的插件你不
想测试, 不想让它运行, 可以选

第三项,然后在出现的选择框中去掉不要的插件.

配置好后, 既可以运行, 也可以测试

如果你运行的测试平台用的jre是1.4以上版本, 就可以进行热替换 , 就是你还代码改变
后,编译出新的class,可以在不

重新启动runtime workbench的情况下, 直接把旧的class替换掉. 推荐使用.

[部署插件]

如果你已经开发好你的plugin, 打算部署你的插件, 那很简单, 菜单 export->
deployable plug-ins and features,

之后选择你要导出的插件, finish 就ok了

不过这个导出功能是有bug的, 它会事先check所有插件的dependency, 如果dependency
有问题就不能导出, 但是有时有

的旧的插件的dependency没有及时更新,导致check时出错, 不能导出, 这个在wsad里面
我碰过好几次, 也很郁闷的. 这

个估计会在3.0里面fix, 现在我们也是无奈之下,自己写了一个ant, 然后用ant导出. 其
实都是一样的

Eclipse零起步(11)

(前言)
PDE除了可以开发plugin, 还可以开发fragment, feature 和 site.

(正文)

[fragment 简介]

fragment不是一个完整的plugin, 而是plugin功能的扩展. 对于一个fragment来说, 它
都有一个对应的plugin, 如果

plugin不安装运行, 那fragment就算装了也不会起作用.

一般来说, fragment 最广泛的应用是 nls (native language support). 基本上你看一
下wsad里面的plugins, 都有一

个对应的一个fragment, 名字是对应的plugin后加.nl1来表示. 这个可以看一下零起步
九, 你可以从中了解更多的关于

plugin 在 i18n (internationalization) 方面的应用.

那下面我们来介绍一下,如何开发一个helloworld的fragment, 来实现helloworld的i18n
应用.

[PDE 开发 fragment]

我们先用PDE新建一个hello world的例子, 详见零起步九, 我们假设这个项目的名字叫
做org.eclipse.example.xyz

然后我们再用pde新建一个fragment, 具体如下:

file->new -> plug-in development -> fragment project

fragment project 的名字叫做 org.eclipse.example.xyz.nls, 按next

然后使用code generation wizard来创建插件, 选default fragment structure, 按nex
t

在simple fragment content的plug-in id 按browse 选或直接键入
org.eclipse.example.xyz,确定我们这个fragment

所扩展的plug-in. 然后finish. 这时, 一个fragment已经生成好了.

hello world中, 大家应该还记得它的作用就是resource透视图中有一个sample
menu->sample action, 点击这个菜单后

会有弹出一个对话框, "hello, eclipse world."

那如果在不同的系统中,我们要让这段提示输出不同语言的helloworld, 比如我想在用中
文系统中显示"你好,eclipse世

界!" 的话, 那可以用fragment来实现. 使你的plug-in成为一个多语言版本的plug-in.

[修改plug-in为符合i18n的代码]

我们打开org.eclipse.example.xyz.actions.SampleAction.java,

=================================================

    public void run(IAction action) {        MessageDialog.openInformation(            window.getShell(),            "Xyz Plug-in",            "Hello, Eclipse world");    }


=================================================

这段代码是不符合i18n规则的

我们利用jdt的一个功能, menu->source->externalize string

设"Xyz Plug-in"的key为DIALOG_TITLE, "Hello, Eclipse world"的key为DIALOG_CONTE
NT
然后设properties file的name为message.properties, 这样next之后, 这些string就都
抽出来了

我们会发现sampleaction.java的代码变成了

================================================

    public void run(IAction action) {        MessageDialog.openInformation(            window.getShell(),            Messages.getString("SampleAction.DIALOG_TITLE"), //$NON-NLS-1$            Messages.getString("SampleAction.DIALOG_CONTENT")); //$NON-NLS-1$    }


================================================

同时, 有多了一个messages.java 和message.properties
messages.java是一个resouce bundle的控制类, 而数据都存在message.properties里面


我们看一下message.properties

SampleAction.DIALOG_TITLE=Xyz Plug-in
SampleAction.DIALOG_CONTENT=Hello, Eclipse world

这里等于将这些需要翻译的字符串都外部化出来了

[编写 fragment]

此时,我们要对fragment的事就很简单了.

在fragment对应的src目录下新建一个包 org.eclipse.example.xyz.actions, 在这个包
下面新建一个message_zh.

properties的文件,然后填入:

SampleAction.DIALOG_TITLE=Xyz /u63d2/u4ef6
SampleAction.DIALOG_CONTENT=/u4f60/u597d,eclipse/u4e16/u754c!

你会发觉我填进去的都是/uxxxx, 你可以利用jdk下面的native2ascii来转换, 详见零起
步九

然后,我们就可以测试我们的plug-in和fragment了

[测试不同语言版本的plug-in]

点击run...-> new workbench configuration

我们可以看见这个配置的arguments这个页面中的program arguments这一项的有四个参
数(window下):

-os win32 -ws win32 -arch x86 -nl zh_CN

-nl这个参数就是用来确定启动的这个测试平台的语言环境的, 如果-nl等于zh_CN(中文)
,那启动后点击菜单按钮, 你就会发现弹出一个标题为"Xyz 插件",内容为"你好,Eclipse
世界!"的对话框

如果你的-nl的值是 en_US, 那出来的结果就是"Hello, Eclipse World"


当然, 如果你想开发其他语言版本的话, 可以新建message_xx.properties, xx代表那个
语言的缩写.

如果你启动的-nl的值是 de_DE(德国), 但你没有对应语言的properties的话, 就会自动
调用默认的message.properties


ok, 今天就讲了fragment和fragment在i18n的实际应用, 大家好好消化吧

Eclipse零起步(12)

(前言)
今天介绍PDE的feature部分, 别以为feature没有实际的代码,运行库, 但是它对管理和
组织整个eclipse插件平台是起着

至关重要的作用的.

(正文)

[feature 简介]

一般来说做一个eclipse的插件有可能需要做很多插件, 可以有助于开发时的模块独立化
,层次化, 有时一个产品的插件

可能有com.company.product.core, com.company.product.ui,
com.company.product.help 等等, 如果你的插件还有段

, 做nls支持的话, 那还会有com.company.product.core.nls,
com.company.product.ui.nls, com.company.product.

help.nls等等. 所以一般来说, 发布出去的eclipse插件产品都会包含好多个plug-in,
运行时缺一不可. 那我们如何来

管理这些plug-ins的运行呢. 就要用feature了

feature其实前面已经介绍过了, 它是一个插件的包络器, 让eclipse能够更加方便快捷
的管理插件. 而我们可以利用

feature做些什么呢

1. 管理插件, 包括插件的启动, 禁用, 就算插件已经在plugins目录下, 也可以控制它
是否启用.

2. about 功能: 对于一个插件来说, 他到底派些什么用处, 如何让user能尽快了解你的
插件功能, 那about可以为你做

到很多, 包括about内的介绍等等, (当然还有eclipse online help, 不过这不是featur
e的功能)

3. 定制welcome page: 当你刚装好一个插件, 如果有welcome page的话, 就会自动弹出
, 这个页面对于newbie来说是很

重要的, 你可以在这个page做一份guide, 让user能更快的使用你的插件


[创建 feature]

上一讲, 我们使用helloworld, 并做了些改进, 还开发了一个fragment作为nls的支持.
那我们今天就要把这个东东用

feature进行打包.

我们的plugin是org.eclipse.example.xyz, 以及fragment :
org.eclipse.example.xyz.nls

此时, 我们先新建一个feature的项目, new-> project->plugin development ->
feature project

项目名: org.eclipse.example.xyz_feature 按next

在feature properties页面, 将feature id 改为 org.eclipse.example.xyz, 按next

注意: feature的id要和一个plugin的id, 否则不能做welcome page, 我也不清楚为什么
, 或许这就是规范, 不知有没有别的方法, 还望大家指教

然后在reference plugin and fragment 页面, 我们勾上我们开发plugin和fragment:or
g.eclipse.example.xyz和org.

eclipse.example.xyz.nls, 按finish

现在,一个简单的feature就创建好了. 如果我们还想对feature做一些更多的设置, 就打
开feature.xml这个文件, 用pde

提供的feature manifest editor来修改

[编辑 feature.xml]

这个editor有overview, information, content, advanced 和source 页面, 使您能更
方便的编辑feature.xml

overview:

这个页面主要分3块 general information, feature urls, supported environment.

general info我们可以修改feature的id, name, version, provider等等, 包括banner
image(在install/update透视图

,单击这个feature,就能在preview视图中看到这个image, 就是商标).

feature url包括这个插件以后要进行升级的url, 因为插件也是可以在线升级的, 我们
会在将到site的时候, 就知道这

里的url该填什么值了.

supported environment表明了这个feature的运行环境, 你可以根据你的运行环境,对这
个选项进行选择, manifest

editor做的很方便, 你只要点"..."按钮, 然后选你要的就可以了

information:

这里主要有3大块info, feature description 就是这个feature功能的简要介绍,
copyright notice, 和license agreement. 这些如果是开发商业级插件,应该都是必填
的东东, 也是为了维护自己的权益嘛

content:

这里就是要修改你这个feature到底要装些什么东东了, 如果是按照前面步骤做下来, 你
可以看见在feature plugins and fragments列表中已经包含了org.eclipse.example.xy
z 和org.eclipse.example.xyz.nls这两个东东了

当然,包含好之后,我们还要做一件事,就是compute required plugins and
fragments, 就是你包络的那些插件要依赖的插件,可以用compute按钮这个功能计算出来
, 当然你也可以手工添加

advanced:

这个页面是让你用来包feature的, 就是说feature不仅可以包络plugin和fragment, 还
可以包络feature, 进行迭代式管理,呵呵, 不过一般用的不多

[about feature 编辑]

编辑feature的about属性,要在feature对应id的那个plugin新建一个about.ini文件, 这
个ini配置文件的内容大致如下:

这里有些配置只有在设立feature的primary等于true的时候,才会有效, #注释中都写清
楚的

===============================================
# about.ini
# contains information about a feature
# java.io.Properties file (ISO 8859-1 with "/" escapes)
# "%key" are externalized strings defined in about.properties
# This file does not need to be translated.

# Property "aboutText" contains blurb for "About" dialog (translated)
aboutText=%blurb

# Property "windowImage" contains path to window icon (16x16)
# needed for primary features only

# Property "featureImage" contains path to feature image (32x32)
featureImage=eclipse32.gif

# Property "aboutImage" contains path to product image (500x330 or 115x164)
# needed for primary features only

# Property "appName" contains name of the application (translated)
# needed for primary features only

# Property "welcomePage" contains path to welcome page (special XML-based
format)
# optional

# Property "welcomePerspective" contains the id of the perspective in which
the
# welcome page is to be opened.
# optional
====================================================

基本的格式如上,大家可以按照这个格式编写自己的feature的about配置文件, 其中有一
项welcomePage的属性, 是用来定义welcomepage的location的.

[welcome page]

我们定义welcomePage=$nl$/welcome.xml, 然后同样在org.eclipse.example.xyz这个插
件下新建一个welcome.xml的文件,我们就可以编写我们自己需要的welcome page了,编写
这个xml也是有规范的, 大家可以去网上查一下welcomepage的dtd 或reference 来指导
大家写, 不过最多的方式,其实还是看例子, 我们比如看pde的welcome page这个例子

我们点击help->welcome, 然后在弹出的对话框中,选择Eclipse Plug-in Development
Environment, 这样pde的welcome page就打开了

然后我们再看看它的源地码来比较一下

===================================================

format="wrap">
This page will help familiarize you with the Eclipse Plug-in
Development Environment. To get started, read the sections below and click
on the related links.

The Plug-in Development Perspective
To do plug-in development open to the Plug-in Development Perspective by
selecting
class="org.eclipse.pde.internal.ui.OpenPDEPerspectiveAction">Window > Open
Perspective > Plug-in Development
.


Create New Plug-ins
To start create a
class="org.eclipse.pde.internal.ui.wizards.project.OpenProjectWizardAction">p
lug-in project
. Choose one of the available templates to create initial content and let
the wizard open the plug-in manifest file. Read the 'Welcome' page and
familiarize yourself with things you can do with the newly created plug-in.


Learn more
To learn more you can browse the
Plug-in Development User
Guide
.



======================================================

作为根节点, 可是设置welcome的标题

对于这份welcomepage的内容做简要介绍

段落分界点

加粗

执行action, 这里的打开plugin-project的向导

用来打开help的相应toc连接

大家可以仿造这些代码来写自己的welcome page



plugin是产品的话, 那feature可以看作是包装盒, 有了一流的产品, 却没有一流的包装
, 销路也不一定会好, 所以大家好好用feature,也是很有必要的

Eclipse零起步(13)

(前言)
今天介绍如何用pde做plug-in install/update site, 使您的插件能够在线安装升级哦.

(正文)

[site 简介]

前几讲我们在讲安装插件的时候, 讲过安装的方式有几种, 包括直接copy, link方式 和
智能安装. 其中智能安装就是

利用eclipse自带的install/update功能来实现插件的安装和升级. 我们做完插件,只需
发布一个安装升级的网址,就一切

ok了.

那这样可以实现自动安装和升级的站点改如何做呢, 其实很简单的, 只要站点内容的配
置符合一定的规范即可.

我们会继续沿用昨天和前天的例子, 把org.eclipse.example.xyz这个插件发布到一个站
点上去.

[利用向导创建update site]

new -> project -> plug-in development -> update site project, 按next

项目名为: org.eclipse.example.xyz_site, 按finish

一个site项目就建好了, 然后我们展开这个项目, 会发现有site.xml文件 , features和
plugins目录, site.xml就是用

来定义站点的具体信息, features和plugins则是用来存放站点所有的features和plugin
s.

[利用manifest editor 来编辑site]

打开site.xml, 有description, build, features, archives 和source等页面

description page:

text是对这个site的一个描述, 当然如何这段描述保存在某个url上,也可以知道url的值
来完成

category是用来分类的, 一般来说一个站点要存多个features时, 那就有必要做个分类.
一般来说, 对于同名feature的

不同版本,我们可以把他放到一个分类中去. 当然也有别的分法, 大家可以各取所好. 添
加分类, 用add按钮添加. 例子

中, 我们需要添加一个Xyz Example分类.

build page:

这个页面很有帮助的, 首先我们在features to build的list中添加我们需要的安置的fe
atures进去, 比如我们例子中的

org.eclipse.example.xyz, 添加进去,然后我们还要选中复选框, 表明我们需要把这个f
eature发布到站点上去, 否则

build的时候会忽略的.

之后先别急着build, 我们来看看别的页面

features page:

我们可以看见我们前面添加的一个features存放的路径, 以及他的properties和它所处
的category, 你可以对这些值做

相应的修改. 同时例子中, 我们需要把org.eclipse.example.xyz这个feature的categor
y设为Xyz example.

archive page:

这块是专门做路径映射的, 具体可以参见platform plug-in developer guide中的站点
映射的参考资料

等以上我们都设置完后,我们就可以进行build了.
翻到build page: 按一下build按钮, ant就会帮助我们自动build好整个site
根据默认设置, 所有的features和plugins都会build到site项目的features和plugins目
录中去
其中有个选项是scrub output folders before the build, 这样在build前, 会先清空
一下输出目录.

[site 结构]

build完成之后,我们就可以展开site项目, 看到site的原貌

+ project/
+ plugins/
- org.eclipse.example.xyz_1.0.0.jar
- org.eclipse.example.xyz.nls_1.0.0.jar
+ features/
- org.eclipse.example.xyz_1.0.0.jar
- site.xml

site.xml的内容
==========================================



id="org.eclipse.example.xyz"
version="1.0.0">






===========================================

其中site里定义了, 一个feature: org.eclipse.example.xyz_1.0.0, 和一个category:
Xyz Example

[测试 site]

如果你以上项目都在本机创建开发, 那就直接切换到install/update 透视图, 在featur
es udpate视图的my computer中

, 搜索到开发站点项目的那个目录.

你会发觉那个项目目录的图标和一般的目录不同, 说明eclipse已经把这个目录看作是ec
lipse的一个update site了. 继

续展开, Xyz Example -> org.eclipse.example.xyz 1.0.0, 点击这个feature, 然后in
stall now.


[发布 site]

发布也就很简单了, 你只要把你的项目里面的site.xml文件, plugins和features目录下
的所有内容, 安置到你的http

server或ftp server上, 别人就可以访问安装升级了

原创粉丝点击