# 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