【Eclipse插件开发】Eclipse p2入门

Eclipse p2 随笔

  • p2基础
    • 文件布局
      • dropins
        • Supported dropins formats
        • Debugging dropins
      • bundle pooling
      • Installer
    • Running the p2 UI from a self-hosted workbench

p2基础

文件布局

  在p2之前,许多 Eclipse 用户绕过 Update Manager 并通过将新插件转储到eclipse/plugins/目录中并使用 -clean 命令行参数重新启动来安装新插件。这种“狂野”的方法有很多缺点,我们不会在这里讨论,但可以说不推荐这种安装方法。尽管 p2 会检测直接添加到plugins文件夹中的插件(具有相关的启动性能成本),但不支持对p2 安装在此目录中的插件进行更改。如果您手动删除 p2 安装的插件,或尝试用不同版本替换,p2 将无法检测到它并且可能会损坏。

  p2建议用户不要手动在plugin目录中瞎搞,如果想绕过p2的安装操作安装一个插件的话,那就把野生的插件扔到dropins里,而不是plugins目录。

  简单的经验法则是:如果您手动添加了某些内容,则可以手动删除它。如果通过 p2 安装,则应通过 p2 卸载。较短的经验法则是:如果可以避免,请不要弄乱插件文件夹。p2 提供了一个新的 dropins 文件夹,它功能更强大,并允许将 p2 管理的内容与其他方式管理的内容(如下所述)分开。

  当您安装支持 p2 的 Eclipse 应用程序时,您会注意到一些以前不存在的新文件和目录。这是典型 Eclipse 安装树的子集,其中突出显示了一些新内容:

eclipse/
├── configuration/
│   ├── config.ini
│   └── org.eclipse.equinox.simpleconfigurator/
│       └── bundles.info
├── dropins/
├── features/
├── p2/
├── plugins/
├── eclipse.exe
└── eclipse.ini

  文件bundles.info包含当前系统中安装的所有插件的列表。在启动时,此文件中列出的所有插件都作为要运行的插件集提供给 OSGi。

  插件目录或其他地方的任何额外插件都将被忽略。如果您真的想强制 Eclipse 在安装了一组特定的包的情况下启动,您可以手动编辑此文件以获得您需要的内容。但是,除非您只是在进行测试,否则不建议编辑此文件。但是,了解此文件很有用,这样您就可以准确查看正在运行的系统中安装的内容。通常,p2 是此文件与Eclipse世界之间的接口。客户端通过 API、GUI 或下面描述的一些工具向 p2 发起供应请求,因此 p2 可以通过更新 bundles.info 文件从 OSGi 运行时安装或卸载包。

  如果您不想使用 p2 用户界面,新的dropins文件夹是您可以放入额外插件的地方。有关更多详细信息,请参阅dropins部分。为了向后兼容,p2 还将检测放入plugins目录的额外插件,并将任何发现的包安装到系统中。

  请注意,上面的目录结构只是基于 Eclipse 的应用程序的示例布局。实际上,很少有这种结构能够保证采用这种形状。可以使用 -configuration 命令行参数将配置目录与安装的其余部分分开存储。bundles和features可能位于磁盘上其他地方的共享捆绑包池中。eclipse.ini 和 eclipse.exe 文件可能使用不同的名称。当单个管理代理正在配置多个应用程序时,p2 目录也可以存储在其他地方。简而言之,您最好不要在代码中使用Eclipse的安装路径作为相对路径去索引一些文件,因为Eclipse目录结构不一定是上述结构。

dropins

供应操作通常应使用 p2 UI 或通过调用p2 工具或 API 进行。但是,在某些情况下,脚本需要通过文件系统操作安装插件和功能,并让系统在启动时或运行时动态发现新内容。为了支持这种对系统的低级操作,p2 支持监视目录的概念。监视目录是用户或脚本可以放置文件并让 p2 发现它们的地方。可以对监视目录应用各种策略,以配置何时检查新内容,以及是否急切安装发现的内容。

Eclipse 平台附带一个名为dropins的默认监视目录。dropins 文件夹配置为在启动期间进行扫描,并将更改立即应用于正在运行的系统。因此可以像过去使用的插件目录一样使用 dropins 文件夹。

这里旧行为的一个微妙变化是,添加到dropins文件夹中的插件和功能正确安装到系统中,而不是强制安装。这意味着 p2 有机会确认新插件与其他已安装的插件,它甚至可以出去获取新插入的插件的任何缺失的先决条件。这也意味着您以后可以使用 GUI 安装依赖于dropins文件夹中插件的额外功能,因为 p2 知道它们并且可以推断它们的依赖关系。换句话说,通过dropins文件夹安装的新插件的行为与通过用户界面安装的插件完全一样。请注意,更新位于dropins下的插件使用 p2 UI 的文件夹将导致更新的插件被保存在主 eclipse/plugins 和 eclipse/features 文件夹下,而不是像预期的那样作为旧版本插件的兄弟姐妹保存在dropins层次结构下

Supported dropins formats

dropins 文件夹支持多种布局,具体取决于应用程序的规模及其各部分所需的分离程度。最简单的布局是将 jar 或目录格式的插件直接放入 dropins 文件夹中
reference :https://wiki.eclipse.org/Equinox/p2/Getting_Started#Dropins

Debugging dropins

如果您尝试使用 dropins,但你bundle并没有被,请首先确保org.eclipse.equinox.ds和org.eclipse.equinox.p2.reconciler.dropins被标记为自动启动。

dropins 的解析错误默认被忽略。要启用有用的日志消息,请将以下跟踪选项放在.options文件中:

org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/reconciler=true
然后使用“ -debug path/to/.options ”运行

bundle pooling

在 p2 之前,每个 Eclipse Application都有自己的私有plugins目录,用于保存该应用程序专属的软件(或插件)。这有一个缺点,即安装了两个或多个基于 Eclipse 的应用程序的系统最终会导致软件(或plugins)和其他artifacts的大量重复。此外,必须为每个应用程序单独升级公共部分,这通常导致本地系统上其他地方已经可用的软件下载速度缓慢。

为了避免这个重复问题,p2 本身支持bundle池的概念。使用bundle池时,多个应用程序共享一个公共插件目录,用于存储它们的软件。没有重复的内容,升级软件时也没有重复的下载。windows系统下使用了bundle池的Eclipse应用具有类似如下的布局:

Application1/
   configuration/
     config.ini
     ... other configuration files for Application1...
   Application1.exe
   Application1.ini
   
Application2/
   configuration/
     config.ini
     ... other configuration files for Application2...
   Application2.exe
   Application2.ini
   
 ...
 
 Documents and Settings
   Username
     .p2/
       org/eclipse.equinox.p2.core
       org/eclipse.equinox.p2.director
       org/eclipse.equinox.p2.engine
       org/eclipse.equinox.p2.touchpoint.eclipse
         plugins/      <-- shared bundle pool

通过这种布局,所有软件都存储在应用程序安装区域之外的单个plugins目录中。p2 负责确保系统中各种应用程序所需的bundle存在于bundle池中。

Installer

现在有一个Equinox/p2/Installer的安装器,将演示安装 Eclipse Project SDK。该安装程序既支持传统的独立安装,也支持使用bundle pooling 的安装

Running the p2 UI from a self-hosted workbench

我们尚不支持正确配置的自托管 p2 系统(请参阅错误 224658)。这意味着如果您运行自托管工作台,则启动的 Eclipse 将无法识别 p2。p2 UI 会注意到这一点并告诉您它无法打开。

如果您只想开发或以其他方式使用新 UI,并且您不关心自托管工作台未配置,您可以加载org.eclipse.equinox.p2.ui.sdk项目并更改此代码在ProvSDKUIActivator 中。

 ProvSDKUIActivator.ANY_PROFILE = true;

这将允许您启动 UI,但请注意 UI 将在主机工作台的安装配置文件上运行。

你可能感兴趣的:(Eclipse插件开发,Eclipse插件开发,p2)