# Eclipse PDE 安装
Eclipse 版本选择:2023-09 (4.29.0) 的 Committers 或者 JEE 版本。
# 插件项目导入及运行
依次点击 File -> Import -> General -> Existing Projects into Workspace,选中 DevOps 代码目录下的模块
devops-ide-eclipse
后点击Finish
完成导入点击进入 Window -> Preferences -> Java-> Installed JREs 页面,点击【Add】增加本地 JDK 的安装目录
注意
JDK 最好使用由 Oracle 公司发布的,使用 OpenJDK 可能会出现依赖包缺失,且要求版本大于等于17
点击进入 Window -> Preferences -> Java-> Installed JREs 页面,将
Compiler compliance level
设置为17运行插件
鼠标右键点击
com.primeton.devops.ide.eclipse
模块后,选择并点击 Debug As -> Eclipse Application 即可运行插件。
# 目录结构
├── build.properties
├── icons
│ ├── refresh.gif
│ ├── workItemBug.png
│ ├── workItemCustom.png
│ ├── workItems.gif
│ ├── workItemStory.png
│ └── workItemTask.png
├── META-INF
│ └── MANIFEST.MF
├── plugin.properties
├── plugin.xml
├── plugin_zh_CN.properties
└── src
└── com
└── primeton
└── devops
└── ide
└── eclipse
├── action
│ └── WorkItemSelectAction.java
├── DevopsConstant.java
├── DevopsPluginImages.java
├── DevopsUImessage.java
├── DevopsUImessage.properties
├── DevopsUImessage_zh_CN.properties
├── DevopsUIPlugin.java
├── dialog
│ ├── MemberSelectDialog.java
│ ├── SolutionStatusDialog.java
│ └── WorkItemSelectDialog.java
├── editor
│ ├── DevopsWorkItemEditor.java
│ ├── section
│ │ ├── WorkItemAssignSection.java
│ │ ├── WorkItemAttachSection.java
│ │ ├── WorkItemDateSection.java
│ │ ├── WorkItemDescSection.java
│ │ ├── WorkItemGeneralSection.java
│ │ └── WorkItemInfoSection.java
│ ├── WorkItemEditorInput.java
│ └── WorkItemInfoEditorPage.java
├── preferences
│ └── DevopsPreferencePage.java
├── utils
│ ├── ApiUtil.java
│ ├── HttpUtil.java
│ └── WorkItemManager.java
└── view
├── DevopsWorkItemsView.java
└── provider
├── TableContentProvider.java
├── TableLabelProvider.java
├── TableViewerComparator.java
└── WorkItemViewerFilter.java
plugin.xml
:用于插件扩展点的定义。META-INF/MANIFEST.MF
:插件清单,用于定义插件名称、版本、启动器、提供者以及依赖项等声明信息。plugin.properties
:用于插件的全局变量定义,其变量可在plugin.xml
和META-INF/MANIFEST.MF
文件中引用.plugin_zh_CN.properties
:用于国际化,相对于plugin.properties
的中文适配。DevopsUImessage.java
:国际化类,用于需进行国际化的属性变量的声明。DevopsUImessage.properties
和DevopsUImessage_zh_CN.properties
这两个文件分别是对应这些属性变量的英文和中文的适配。DevopsUIPlugin.java
:插件启动/销毁类,通过插件清单文件META-INF/MANIFEST.MF
中的Bundle-Activator
参数进行定义。DevopsPluginImages.java
:图标加载器。com.primeton.devops.ide.eclipse.action
包:Git Staging 视图中打开工作项弹窗的按钮实现。com.primeton.devops.ide.eclipse.dialog
包:实现各类弹窗。com.primeton.devops.ide.eclipse.editor
包:实现工作项详情页。com.primeton.devops.ide.eclipse.preferences
包:实现配置 DevOps 信息的首选项页。com.primeton.devops.ide.eclipse.view
包:实现工作项列表视图。
# 扩展点
扩展点在 Eclipse 中作为一个松耦合的功能块被广泛使用,在plugin.xml
中可以看到插件扩展点的声明:
DevOps信息首选项
<extension point="org.eclipse.ui.preferencePages"> <page class="com.primeton.devops.ide.eclipse.preferences.DevopsPreferencePage" id="com.primeton.devops.workItem.preference" name="%DevopsConnection"/> </extension>
工作项列表视图
<extension point="org.eclipse.ui.views"> <category id="com.primeton.devops.category" name="%DevopsCategory"/> <view category="com.primeton.devops.category" class="com.primeton.devops.ide.eclipse.view.DevopsWorkItemsView" icon="icons/workItems.gif" id="com.primeton.devops.workitem.view" name="%DevopsWorkItems"/> </extension> <extension point="org.eclipse.ui.perspectiveExtensions"> <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective"> <viewShortcut id="com.primeton.devops.workitem.view"/> <view id="com.primeton.devops.workitem.view" ratio="0.5" relationship="stack" relative="org.eclipse.ui.views.ProblemView" visible="true"/> </perspectiveExtension> </extension>
工作项详情编辑页
<extension point="org.eclipse.ui.editors"> <editor class="com.primeton.devops.ide.eclipse.editor.DevopsWorkItemEditor" default="true" icon="icons/workItems.gif" id="com.primeton.devops.workitem.editor" name="%DevopsWorkItemEditor"/> </extension>
Git Staging 视图中的工作项按钮
<extension point="org.eclipse.ui.viewActions"> <viewContribution id="StagingView.commitCode" targetID="org.eclipse.egit.ui.StagingView"> <action class="com.primeton.devops.ide.eclipse.action.WorkItemSelectAction" icon="icons/workItems.gif" id="org.eclipse.egit.ui.StagingView.action.WorkItemSelectAction" label="commitCode" style="push" toolbarPath="action" tooltip="%SelectWorkItems"/> </viewContribution> </extension>
# 导出插件包
# PDE 方式
鼠标右键点击com.primeton.devops.ide.eclipse
模块后,选择进入 Export -> Plug-in Development -> Deployable plug-ins and fragments 页面,并在【Destination】标签页中配置插件导出路径,最后点击【Finish】按钮即可完成插件导出。
# Ant 方式
Eclipse 插件代码亦可用 Apache Ant 工具进行编译并导出插件包。
用于构建并导出本插件的 Ant 的build.xml
文件位于 DevOps 代码根路径下的devops-dailybuild/studio/build-eclipse
目录中,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="default" name="devops-ide-eclipse">
<property name="eclipse.linux.url" value="http://10.15.15.133:8081/repository/3rd/com/primeton/3rd/eclipse/eclipse_linux/4.29.0/eclipse-jee-2023-09-R-linux-gtk-x86_64.zip"/>
<property environment="env"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="17"/>
<property name="source" value="17"/>
<target name="default">
<echo level="info">
the Parameters:
eclipse.linux.url: eclipse-jee-2023-09-R-linux-gtk-x86_64.zip. default value is ${eclipse.linux.url}
studio.eclipse.path: cannot be null
</echo>
<antcall target="init"/>
<antcall target="compiler"/>
<antcall target="clean"/>
</target>
<target name="init">
<delete dir="${basedir}/features" />
<delete dir="${basedir}/plugins" />
<mkdir dir="${basedir}/features" />
<mkdir dir="${basedir}/plugins" />
<echo message="copy plugins" />
<copy todir="${basedir}/plugins">
<fileset dir="${studio.eclipse.path}" />
</copy>
<echo message="copy features" />
<move todir="${basedir}/features/com.primeton.devops.ide.feature">
<fileset dir="${basedir}/plugins/com.primeton.devops.ide.feature" />
</move>
<delete dir="${basedir}/eclipse" />
<mkdir dir="${basedir}/eclipse" />
<get src="${eclipse.linux.url}" dest="${basedir}/eclipse" />
<unzip dest="${basedir}/eclipse">
<fileset dir="${basedir}/eclipse/">
<include name="*.zip" />
</fileset>
</unzip>
</target>
<target name="compiler">
<tstamp>
<format property="time" pattern="yyyyMMddHHmmss" locale="en,GB" />
</tstamp>
<exec dir="${env.JAVA17_HOME}/bin" executable="java" failonerror="true">
<arg line="-version" />
</exec>
<echo message="exec:${env.JAVA17_HOME}/bin/java -jar ${basedir}/eclipse/eclipse/plugins/org.eclipse.equinox.launcher_1.6.500.v20230717-2134.jar -application org.eclipse.ant.core.antRunner -buildfile ${basedir}/eclipse/eclipse/plugins/org.eclipse.pde.build_3.12.100.v20230825-1354/scripts/build.xml -Dbuilder=${basedir} -Dbase=${basedir}/eclipse -DbaseLocation=${basedir}/eclipse/eclipse -DbuildDirectory=${basedir}" />
<exec dir="${env.JAVA17_HOME}/bin" executable="${env.JAVA17_HOME}/bin/java" failonerror="true">
<arg line="-jar ${basedir}/eclipse/eclipse/plugins/org.eclipse.equinox.launcher_1.6.500.v20230717-2134.jar" />
<arg line="-application org.eclipse.ant.core.antRunner" />
<arg line="-buildfile ${basedir}/eclipse/eclipse/plugins/org.eclipse.pde.build_3.12.100.v20230825-1354/scripts/build.xml" />
<arg line="-Ddebug=true" />
<arg line="-Dbuilder=${basedir}" />
<arg line="-Dbase=${basedir}/eclipse" />
<arg line="-DbaseLocation=${basedir}/eclipse/eclipse" />
<arg line="-DbuildDirectory=${basedir}" />
</exec>
</target>
<target name="clean">
<delete dir="${basedir}/eclipse" />
<delete dir="${basedir}/dist" failonerror="false" />
<mkdir dir="${basedir}/dist" />
<move file="${basedir}/I.TestBuild/eclipsetools.zip" todir="${basedir}/dist"/>
</target>
</project>
通过 Ant 命令执行 build.xml 来编译代码并生成插件包:
ant -buildfile ${devops-root}/devops-dailybuild/studio/build-eclipse/build.xml -Dstudio.eclipse.path=${devops-root}/devops-ide-eclipse